NodeJS - url.parse() 方法



NodeJS url.parse() 方法接受一个 URL 字符串,对其进行解析,最后,它返回一个对象,其中包含提供的 URL 字符串中存在的段。

返回的对象包含以下属性

  • protocol:指定 URL 的协议方案(例如:https:)。
  • slashes:一个布尔值,指定协议后是否跟两个 ASCII 正斜杠 (//)。
  • auth:指定 URL 的身份验证段(例如:用户名:密码)。
  • username:指定身份验证段中的用户名。
  • password:指定身份验证段中的密码。
  • host:指定带有端口号的主机名。
  • hostname:指定主机名,不包括端口号。
  • port:表示端口号。
  • pathname:表示URL路径。
  • query:除非 parsing 设置为 false,否则这将包含已解析的查询字符串。
  • hash:它指定 URL 的片段部分,包括“#”。
  • href:指定完整的 URL。
  • origin:指定URL的来源。

语法

以下是 NodeJS url.parse() 方法的语法


 url.parse(urlString[, parseQueryString[, slashesDenoteHost]])

参数

此方法接受三个参数。下面将对此进行描述

  • urlString:此参数指定需要分析的 URL 字符串。
  • parseQueryString:此参数指定一个布尔值。如果为 true,则 URL 字符串中的查询段将设置为对象。如果为 false,则查询属性将是一个未解析的字符串。默认情况下,该值为 false。
  • slashesDenoteHost:此参数指定一个布尔值。如果为 true,则文本字符串“//”之后和下一个“/”之前的第一个标记将被视为主机。例如,考虑 (//one/two),结果将是 {host: 'one', pathname: '/two'} 而不是 {pathname: '//one/two'}。默认情况下,该值为 false。

返回值

此方法采用 URL 字符串并返回一个对象。

如果要分析的 urlString 不是字符串,则此方法将抛出 TypeError。

如果 auth 属性存在但无法解码,则此方法将引发 URIError。

如果我们将布尔值 true 作为 NodeJS url.parse() 方法的 parseQueryString 参数传递,它将以对象的形式设置查询属性。


const url = require('url');
const address = 'https://user:pass@site.com:2000/pa/th?q=val#hash';
let result = url.parse(address, true);
console.log(result)

输出

Url {
protocol: 'https:',
slashes: true,
auth: 'user:pass',
host: 'site.com:2000',
port: '2000',
hostname: 'site.com',
hash: '#hash',
search: '?q=val',
query: { q: 'val' },
pathname: '/pa/th',
path: '/pa/th?q=val',
href: 'https://user:pass@site.com:2000/pa/th?q=val#hash'
}

如果我们将布尔值 false 作为 NodeJS parse() 方法的 parseQueryString 参数传递,它会将查询属性作为未解析的字符串返回。


const url = require('url');
const address = 'https://site.com/pa/th?q=val#hash';
let result = url.parse(address, false);
console.log(result)

输出

Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'site.com',
port: null,
hostname: 'site.com',
hash: '#hash',
search: '?q=val',
query: 'q=val',
pathname: '/pa/th',
path: '/pa/th?q=val',
href: 'https://site.com/pa/th?q=val#hash'
}

如果 parse() 方法的 urlString 参数不是字符串,则返回 TypeError。

在这里,我们尝试解析一个不是字符串的 URL 字符串。


const url = require('url');
const address = 798032;
let result = url.parse(address, true);
console.log(result)

类型错误

正如我们在下面的输出中看到的,parse() 方法会抛出 TypeError,因为提供的 URL 字符串不是字符串。

url.js:150
throw new ERR_INVALID_ARG_TYPE('url', 'string', url);
^

TypeError [ERR_INVALID_ARG_TYPE]: The "url" argument must be of type string. Received type number
at Url.parse (url.js:150:11)
at Object.urlParse [as parse] (url.js:144:13)
at Object.<anonymous> (/home/cg/root/63aab5fe9c383/main.js:5:18)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
urlobject Properties (Legacy)