URL 字符串与 URL 对象

URL 字符串是结构化的字符串,包含多个含义不同的组成部分。 解析字符串后返回的 URL 对象,每个属性对应字符串的各个组成部分。
url 模块提供了两套 API 来处理 URL:一个是旧版本遗留的 API,一个是实现了 WHATWG标准的新 API。
遗留的 API 还没有被废弃,保留是为了兼容已存在的应用程序。 新的应用程序应使用 WHATWG 的 API。
WHATWG 的 API 与遗留的 API 的区别如下。 在下图中,URL 'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash' 上方的是遗留的 url.parse() 返回的对象的属性。 下方的则是 WHATWG 的 URL对象的属性。
WHATWG 的 origin 属性包括 protocolhost,但不包括 usernamepassword
image.png使用 WHATWG 的 API 解析 URL 字符串:

  1. const myURL =
  2. new URL('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');
  3. URL {
  4. href:
  5. 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash',
  6. origin: 'https://sub.host.com:8080',
  7. protocol: 'https:',
  8. username: 'user',
  9. password: 'pass',
  10. host: 'sub.host.com:8080',
  11. hostname: 'sub.host.com',
  12. port: '8080',
  13. pathname: '/p/a/t/h',
  14. search: '?query=string',
  15. searchParams: URLSearchParams { 'query' => 'string' },
  16. hash: '#hash' }

使用遗留的 API 解析 URL 字符串:

  1. const url = require('url');
  2. const myURL =
  3. url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');
  4. Url {
  5. protocol: 'https:',
  6. // slashes 属性是一个 boolean,如果 protocol 中的冒号后面跟着两个,
  7. // ASCII 斜杠字符(/),则值为 true。
  8. slashes: true,
  9. auth: 'user:pass',
  10. host: 'sub.host.com:8080',
  11. port: '8080',
  12. hostname: 'sub.host.com',
  13. hash: '#hash',
  14. search: '?query=string',
  15. query: 'query=string',
  16. pathname: '/p/a/t/h',
  17. path: '/p/a/t/h?query=string',
  18. href:
  19. 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash' }

WHATWG

url.toJSON()

返回string
URL对象上调用toString()方法将返回序列化的URL。返回值与url.hrefurl.toJSON()的相同。

url.toString()

URL对象上调用toJSON()方法将返回序列化的URL。返回值与url.hrefurl.toString()的相同。

  1. const { URL } = require('url');
  2. const myURLs = [
  3. new URL('https://www.example.com'),
  4. new URL('https://test.example.org')
  5. ];
  6. console.log(JSON.stringify(myURLs));
  7. // 输出 ["https://www.example.com/","https://test.example.org/"]

url.searchParams

返回一个

url.domainToASCII(domain:string) : string

返回Punycode ASCII序列化的domain. 如果domain是无效域名,将返回空字符串。
它执行的是url.domainToUnicode()的逆运算。

url.domainToUnicode(domain:string) : string

返回Unicode序列化的domain. 如果domain是无效域名,将返回空字符串。
它执行的是url.domainToASCII()的逆运算。

url.fileURLToPath(url: string|URL) : string

此方法保证百分号编码字符解码结果的正确性,同时也确保绝对路径字符串在不同平台下的有效性。

  1. new URL('file:///C:/path/').pathname; // 错误: /C:/path/
  2. fileURLToPath('file:///C:/path/'); // 正确: C:\path\ (Windows)
  3. new URL('file://nas/foo.txt').pathname; // 错误: /foo.txt
  4. fileURLToPath('file://nas/foo.txt'); // 正确: \\nas\foo.txt (Windows)
  5. new URL('file:///你好.txt').pathname; // 错误: /%E4%BD%A0%E5%A5%BD.txt
  6. fileURLToPath('file:///你好.txt'); // 正确: /你好.txt (POSIX)
  7. new URL('file:///hello world').pathname; // 错误: /hello%20world
  8. fileURLToPath('file:///hello world'); // 正确: /hello world (POSIX)

url.format(URL[, options])