处理HTTP请求时url模块使用率比较高,因为该模块允许解析URL、生成URL,以及拼接URL。首先我们来看看Node官方给的一个完整RUL:
var urlpath =' http://user:pass@host.com:8080/p/a/t/h?query=string#hash';
1、url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
将一个URL解析成一个对象,第2、3个参数都是boolean类型,parseQueryString定义是否将查询字符串query转化为object,默认为false不转换
- url.parse(urlpath)
Url {
protocol: 'http:',
slashes: true,
auth: 'user:pass',
host: 'host.com:8080',
port: '8080',
hostname: 'host.com',
hash: '#hash',
search: '?query=string',
query: 'query=string',
pathname: '/p/a/t/h',
path: '/p/a/t/h?query=string',
href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' }
个人感觉用到的最多的就是pathname和query两个属性了,请注意区分host/hostname、search/query、path/pathname之间的区别
- url.parse(urlpath,true)
Url {
protocol: 'http:',
slashes: true,
auth: 'user:pass',
host: 'host.com:8080',
port: '8080',
hostname: 'host.com',
hash: '#hash',
search: '?query=string',
query: { query: 'string' },
pathname: '/p/a/t/h',
path: '/p/a/t/h?query=string',
href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' }
看query变成了对象
- 第三个参数等于true
时,该方法可以正确解析不带协议头的URL,例如//www.example.com/foo/bar
。
2、url.format(urlObj)
讲一个URLObj转为一个URL字符串,parse方法的逆向
3、url.resolve(url1, url2)
用于拼接两个url,下面几个测试:
一开始看这个好懵逼,然后忽然好想明白了,第二个参数url2带“./”或不带开头是对url1的相对路径,而‘/’是绝对路径,对url1根目录的路径。
也不知道理解的对不对。。