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'