url.format(urlObject)


稳定性: 3 - 传统做法:请改用 WHATWG URL API。

  • urlObject <Object> | <string> 一个 URL 对象(由 url.parse() 返回或通过其他方式构建)。如果是字符串,则通过将其传递给 url.parse() 转换为对象。

url.format() 方法返回一个根据 urlObject 生成的格式化 URL 字符串。

【The url.format() method returns a formatted URL string derived from urlObject.】

const url = require('node:url');
url.format({
  protocol: 'https',
  hostname: 'example.com',
  pathname: '/some/path',
  query: {
    page: 1,
    format: 'json',
  },
});

// => 'https://example.com/some/path?page=1&format=json' 

如果 urlObject 不是对象或字符串,url.format() 将抛出一个 TypeError

【If urlObject is not an object or a string, url.format() will throw a TypeError.】

格式化过程如下:

【The formatting process operates as follows:】

  • 创建了一个新的空字符串 result
  • 如果 urlObject.protocol 是一个字符串,它会原样追加到 result 中。
  • 否则,如果 urlObject.protocol 不是 undefined 且不是字符串,将抛出 Error
  • 对于所有 urlObject.protocol 的字符串值,如果 不以 ASCII 冒号(:)结尾,则字面字符串 : 将被附加到 result
  • 如果以下任一条件为真,则字面字符串 // 将被附加到 result
    • urlObject.slashes 属性为 true;
    • urlObject.protocolhttphttpsftpgopherfile 开头;
  • 如果 urlObject.auth 属性的值为真值,并且 urlObject.hosturlObject.hostname 不是 undefinedurlObject.auth 的值将被强制转换为字符串并附加到 result 后面,后跟字面量字符串 @
  • 如果 urlObject.host 属性是 undefined,那么:
    • 如果 urlObject.hostname 是一个字符串,它将被添加到 result 中。
    • 否则,如果 urlObject.hostname 不是 undefined 且不是字符串,将抛出 Error
    • 如果 urlObject.port 属性值为真,并且 urlObject.hostname 不是 undefined
      • 字面字符串 : 被附加到 result,并且
      • urlObject.port 的值会被强制转换为字符串并追加到 result 中。
  • 否则,如果 urlObject.host 属性的值为真值,则将 urlObject.host 的值强制转换为字符串并附加到 result
  • 如果 urlObject.pathname 属性是一个非空字符串:
    • 如果 urlObject.pathname 不以 ASCII 斜杠 (/) 开头,那么字面字符串 '/' 会被追加到 result
    • urlObject.pathname 的值会被添加到 result 中。
  • 否则,如果 urlObject.pathname 不是 undefined 且不是字符串,将抛出 Error
  • 如果 urlObject.search 属性是 undefined,且 urlObject.query 属性是一个 Object,则会在 result 后追加字面字符串 ?,然后是调用 querystring 模块的 stringify() 方法并传入 urlObject.query 值的输出。
  • 否则,如果 urlObject.search 是一个字符串:
    • 如果 urlObject.search 的值不以 ASCII 问号字符 (?) 开头,则将字面字符串 ? 附加到 result
    • urlObject.search 的值会被添加到 result 中。
  • 否则,如果 urlObject.search 不是 undefined 且不是字符串,将抛出 Error
  • 如果 urlObject.hash 属性是一个字符串:
    • 如果 urlObject.hash 的值 不以 ASCII 井号(#)字符开头,则文字字符串 # 会被追加到 result 中。
    • urlObject.hash 的值会被添加到 result 中。
  • 否则,如果 urlObject.hash 属性不是 undefined 且不是字符串,将会抛出 Error 错误。
  • result 被返回。