url.format(urlObject)
稳定性: 0 - 弃用: 改为使用 WHATWG URL API 。
url.format() 方法返回从 urlObject 派生的格式化网址字符串。
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。
格式化过程如下:
- 创建新的空字符串
result。 - 如果
urlObject.protocol是字符串,则按原样附加到result。 - 否则,如果
urlObject.protocol不是undefined并且不是字符串,则抛出Error。 - 对于所有不以 ASCII 冒号(
:)字符结尾的urlObject.protocol字符串值,文字字符串:将附加到result。 - 如果以下任一条件为真,则文字串
//将附加到result:urlObject.slashes属性为真;urlObject.protocol以http、https、ftp、gopher或file开头;
- 如果
urlObject.auth属性的值为真,并且urlObject.host或urlObject.hostname不是undefined,则urlObject.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返回。
Stability: 0 - Deprecated: Use the WHATWG URL API instead.
urlObject<Object> | <string> A URL object (as returned byurl.parse()or constructed otherwise). If a string, it is converted to an object by passing it tourl.parse().
The url.format() method returns a formatted URL string derived from
urlObject.
url.format({
protocol: 'https',
hostname: 'example.com',
pathname: '/some/path',
query: {
page: 1,
format: 'json'
}
});
// => 'https://example.com/some/path?page=1&format=json'If urlObject is not an object or a string, url.format() will throw a
TypeError.
The formatting process operates as follows:
- A new empty string
resultis created. - If
urlObject.protocolis a string, it is appended as-is toresult. - Otherwise, if
urlObject.protocolis notundefinedand is not a string, anErroris thrown. - For all string values of
urlObject.protocolthat do not end with an ASCII colon (:) character, the literal string:will be appended toresult. - If either of the following conditions is true, then the literal string
//will be appended toresult:urlObject.slashesproperty is true;urlObject.protocolbegins withhttp,https,ftp,gopher, orfile;
- If the value of the
urlObject.authproperty is truthy, and eitherurlObject.hostorurlObject.hostnameare notundefined, the value ofurlObject.authwill be coerced into a string and appended toresultfollowed by the literal string@. - If the
urlObject.hostproperty isundefinedthen:- If the
urlObject.hostnameis a string, it is appended toresult. - Otherwise, if
urlObject.hostnameis notundefinedand is not a string, anErroris thrown. - If the
urlObject.portproperty value is truthy, andurlObject.hostnameis notundefined:- The literal string
:is appended toresult, and - The value of
urlObject.portis coerced to a string and appended toresult.
- The literal string
- If the
- Otherwise, if the
urlObject.hostproperty value is truthy, the value ofurlObject.hostis coerced to a string and appended toresult. - If the
urlObject.pathnameproperty is a string that is not an empty string:- If the
urlObject.pathnamedoes not start with an ASCII forward slash (/), then the literal string'/'is appended toresult. - The value of
urlObject.pathnameis appended toresult.
- If the
- Otherwise, if
urlObject.pathnameis notundefinedand is not a string, anErroris thrown. - If the
urlObject.searchproperty isundefinedand if theurlObject.queryproperty is anObject, the literal string?is appended toresultfollowed by the output of calling thequerystringmodule'sstringify()method passing the value ofurlObject.query. - Otherwise, if
urlObject.searchis a string:- If the value of
urlObject.searchdoes not start with the ASCII question mark (?) character, the literal string?is appended toresult. - The value of
urlObject.searchis appended toresult.
- If the value of
- Otherwise, if
urlObject.searchis notundefinedand is not a string, anErroris thrown. - If the
urlObject.hashproperty is a string:- If the value of
urlObject.hashdoes not start with the ASCII hash (#) character, the literal string#is appended toresult. - The value of
urlObject.hashis appended toresult.
- If the value of
- Otherwise, if the
urlObject.hashproperty is notundefinedand is not a string, anErroris thrown. resultis returned.