解析 URL 对象有以下内容,依赖于他们是否在 URL 字符串里存在。任何不在 URL 字符串里的部分,都不会出现在解析对象里
'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
┌─────────────────────────────────────────────────────────────────────────────┐
│ href │
├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤
│ protocol ││ auth │ host │ path │ hash │
│ ││ ├──────────┬──────┼──────────┬────────────────┤ │
│ ││ │ hostname │ port │ pathname │ search │ │
│ ││ │ │ │ ├─┬──────────────┤ │
│ ││ │ │ │ │ │ query │ │
" http: // user:pass @ host.com : 8080 /p/a/t/h ? query=string #hash "
│ ││ │ │ │ │ │ │ │
└──────────┴┴───────────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘
href: 准备解析的完整的 URL,包含协议和主机(小写)
'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
protocol: 请求协议, 小写
'http:'
slashes: 协议要求的斜杠(冒号后)
true 或 false
host: 完整的 URL 小写 主机部分,包含端口信息
'host.com:8080'
auth: url 中的验证信息
'user:pass'
hostname: 域名中的小写主机名
'host.com'
port: 主机的端口号
'8080'
pathname: URL 中的路径部分,在主机名后,查询字符前,包含第一个斜杠
'/p/a/t/h'
search: URL 中的查询字符串,包含开头的问号
'?query=string'
path: pathname 和 search 连在一起
'/p/a/t/h?query=string'
query: 查询字符串中得参数部分,或者使用 querystring.parse() 解析后返回的对象
'query=string' or {'query':'string'}
hash: URL 的 “#” 后面部分(包括 # 符号)
'#hash'
URL方法URL模块包含分析和解析 URL 的工具。调用 require('url') 来访问模块
var url = require('url'); /* { parse: [Function: urlParse], resolve: [Function: urlResolve], resolveObject: [Function: urlResolveObject], format: [Function: urlFormat], Url: [Function: Url] } */ console.log(url); url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
输入 URL 字符串,返回一个对象
第二个参数parseQueryString(默认为false),如为false,则urlObject.query为未解析的字符串,比如author=%E5%B0%8F%E7%81%AB%E6%9F%B4,且对应的值不会decode;如果parseQueryString为true,则urlObject.query为object,比如{ author: '小火柴' },且值会被decode
第三个参数slashesDenoteHos(默认为false),如果为true,可以正确解析不带协议头的URL,类似//foo/bar里的foo就会被认为是hostname;如果为false,则foo被认为是pathname的一部分
var url = require('url'); var str = 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash'; /* Url { protocol: 'http:', slashes: true, auth: 'user:pass', host: 'host.com:8080', port: '8080', hostname: 'host.com', hash: '#hash', search: '?author=%E5%B0%8F%E7%81%AB%E6%9F%B4', query: 'author=%E5%B0%8F%E7%81%AB%E6%9F%B4', pathname: '/p/a/t/h', path: '/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4', href: 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash' } */ console.log(url.parse(str));