URL
该模块提供了解析 URL 的辅助函数,使用 require('url')
调用。
解析 URL
解析后的 URL 对象通常具有以下的部分或全部字段。如果 URL 字符串中没有,则解析后的 URL 对象也不会存在,下面是一个 URL 的示例:
'http://user:[email protected]:8080/p/a/t/h?query=string#hash'
href
,待解析的、完整的 URL,其中协议和主机都是小写形式,举例:'http://user:[email protected]:8080/p/a /t/h?query=string#hash’protocol
,请求协议,举例:'http:'slashes
,协议冒号之后是否需要反斜线,举例:true or falsehost
,URL 的主机部分,包含端口信息,举例:'host.com:8080'auth
,URL 的授权信息部分,举例:'user:pass'hostname
,主机的主机名部分,举例:'host.com'port
,主机的端口号,举例:'8080'pathname
,URL 的路径部分,位于主机之后、查询字符串之前,如果该值存在则第一个字符为反斜线,不对字符串解码,举例:'/p/a/t/h'search
,URL 的查询字符串部分, 以问号开头,举例:'?query=string'path
,URL 的路径名和查询字符串,不对字符串解码,举例:'/p/a/t/h?query=string'query
,查询字符串中的参数部分,或者是使用 querystring 解析后的对象,举例:'query=string' or {'query':'string'}hash
,以 # 开头的 URL 片段,举例:'#hash'
转义字符
默认情况下,如果有空格和以下字符出现在 URL 中,则会被自动转义:
< > " ` \r \n \t { } | \ ^ '
url.format(urlObj)
接收一个解析后的 URL 对象,返回一个格式化的 URL 字符串。
下面是格式化流程:
href
会被忽略path
会被忽略protocol
,允许缺少冒号,只要存在 host 或者 hostname 字段,http
/https
/ftp
/gopher
/file
协议就会被添加://
后缀,其他协议会被添加:
后缀,比如mailto
/xmpp
/aim
/sftp
/foo
协议等slashes
,如果缺少 host 或者 hostname 字段、协议不属于默认添加://
后缀的协议且需要添加://
后缀,则需要将该值赋值为 true 如果协议需要需要://
auth
,存在即有效hostname
,host 缺失时有效port
,host 缺失时有效host
,用来替代 hostname 和 portpathname
,无论是否以反斜线开头,都做相同的梳理query
,search 缺失时有效search
,用于替代 query,无论是否以问号开头,都会做通常的处理hash
,无论是否以 # 开头,都会做通常的处理
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
该方法用于接收一个 URL 字符串,返回一个 URL 对象。
如果第二个参数的值为 true,则使用 queryString
模块解析查询字符串,query
属性指向一个对象,search
属性指向一个字符串。如果值为 false,query
属性不会被解析或编码。默认值为 false。
如果第三个参数的值为 true,则将 //foo/bar
解析为 { host: 'foo', pathname: '/bar' }
,而不是 { pathname: '//foo/bar' }
。默认值为 false。
url.resolve(from, to)
接收一个 base URL 和一个 href URL,返回一个跳转后的链接地址:
url.resolve('/one/two/three', 'four') // '/one/two/four'
url.resolve('http://example.com/', '/one') // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'