Node.js - url.format() 方法



NodeJS url.format() 方法返回一个派生自 urlObject 的格式化 URL 字符串。

urlObject 可以具有以下属性

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

语法

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


 url.format(urlObject)

参数

  • urlObject:这指定了一个 URL 对象(由 parse() 方法返回或以其他方式构造)。

返回值

此方法接受已分析的 URL,并返回格式化的 URL 字符串。

格式化过程由 NodeJS url.format() 方法完成,如下所示

  • 首先,创建一个新的空字符串(考虑“result”)。
  • urlObject.protocol(urlObject.protocol)
    • 如果 urlObject.protocol 是一个字符串,它将被追加到结果中。否则,如果 urlObject.protocol 不是字符串或未定义,则会抛出 Error。
    • 如果 urlObject.protocol 不以 ASCII 冒号 (:) 字符结尾,则文本字符串 (:)将附加到结果中。
  • urlObject.slashes
    • 这指定了一个布尔值。
    • 如果满足以下任一条件,则文本字符串 (//) 将追加到结果中。
    • 如果 urlObject.slashes 为 true。
    • 如果 urlObject.protocol 是 http、https、ftp、gopher 或 file。
  • urlObject.auth
    • 如果 urlObject.auth 不是未定义的,并且 urlObject.host 或 urlObject.hostname 不是未定义的,则 urlObject.auth 的值将被强制转换为字符串,并附加到结果中,后跟文本字符串“@”。
  • urlObject.host(urlObject.host)
    • 如果 urlObject.host 是一个字符串,它将被追加到结果中。否则,如果不是未定义且不是字符串,则将抛出 TypeError。
    • 如果 urlObject.host 未定义,则考虑 urlObject.hostname。
  • urlObject.hostname
    • 如果 urlObject.hostname 是一个字符串,它将被追加到结果中。否则,如果不是未定义且不是字符串,则会引发 TypeError。
  • urlObject.port
    • 如果考虑主机名并指定了 urlObject.port,则文本字符串 ':“' 将追加到结果中,后跟 urlObject.port。
  • urlObject.pathname
    • 如果 urlObject.pathname 是一个字符串,该字符串不为空,并且最初没有 ASCII 正斜杠 (/),则文本字符串“/”将追加到结果中。
    • urlObject.hash 的值将追加到结果中。
    • 如果 urlObject.hash 属性不是字符串或未定义,则会引发 TypeError。
  • urlObject.search(urlObject.search)
    • 如果 urlObject.search 是一个字符串,并且不以 ASCII 问号 (?) 字符开头,则文本字符串 '?' 将追加到结果中。
    • urlObject.search 值将追加到结果中。
    • 如果 urlObject.search 不是未定义的,也不是字符串,则将抛出 TypeError。
  • urlObject.query
    • 如果 urlObject.query 是一个对象,则文本字符串 '?' 将与传递 urlObject.query 值的查询字符串模块 stringify() 方法一起追加到结果中。
    • 如果同时指定了 urlObject.search 和 urlObject,则只会考虑 urlObject.search 并将其追加到结果中。
  • urlObject.hash
    • 如果 urlObject.hash 是一个字符串:
      • 即使 urlObject.hash 的值最初没有 ASCII 哈希字符 (#),文本字符串“#”也会追加到结果中。
      • urlObject.hash 的值将追加到结果中。
    • 否则,如果 urlObject.hash 属性不是字符串或未定义,则会抛出 TypeError。
  • urlObject.href – 这将被忽略。
  • 最后,format() 方法将形成一个格式化的 URL(结果)。

在以下示例中,我们将使用 NodeJS parse() 方法解析 URL 字符串。然后我们将返回的 urlObject 传递给 NodeJS format() 方法。


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

输出

正如我们在输出中看到的,NodeJS format() 方法返回了一个派生自 urlObject 的格式化 URL 字符串。

https://user:pass@site.com:2000/pa/th?q=val#hash

在下面的示例中,我们正在构造一个 URL 对象,而不是解析。


const url = require('url');
console.log(url.format({
	 protocol: 'https:',
	 auth: 'user:pass',
	 host: 'site.com:2000',
	 port: '2000',
	 hostname: 'site.com',
	 hash: '#hash',
	 search: '?q=val',
	 query: { page:'one', format: 'json'},
	 pathname: '/pa/th',
	 path: '/pa/th?q=val',
}))

输出

正如我们在下面的输出中看到的,format() 方法检索了一个从 urlObject 获取的格式化字符串。

https://user:pass@site.com:2000/pa/th?q=val#hash