url模块
URL各部分说明
例如:
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 or false
- host: URL主机名,包括端口信息,小写 例如: ‘host.com:8080’
- auth: URL中的认证信息 例如: ‘user:pass’
- hostname: 主机名,小写 例如: ‘host.com’
- port: 主机的端口号 例如: ‘8080’
- pathname: URL中路径 例如: ‘/p/a/t/h’
- search: 查询对象,即:queryString,包括之前的问号“?” 例如: ‘?query=string’
- path: pathname 和 search的合集 例如: ‘/p/a/t/h?query=string’
- query: 查询字符串中的参数部分(问号后面部分字符串),或者使用 querystring.parse() 解析后返回的对象 例如:
‘query=string’ or {‘query’:’string’} - hash: 锚点部分(即:“#”及其后的部分) 例如: ‘#hash’
url.parse(url)将url字符串转化为Json对象
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
应用实例:
默认情况url.parse(url)等价于url.parse(url, false, false);
var url = require('url');
var urlString = 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash';
var result = url.parse(urlString);
console.log(result);
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])的第二个可选参数parseQueryString,
如果设置为true时,会使用querystring模块来解析URL中的查询字符串部分,默认为 false。
parseQueryString : 控制解析的 Url {……} 中的 query 字段的值是否为 JSON格式,还是普通字符串格式。
实例如下:
var url = require('url');
var urlString = 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash';
var result = url.parse(urlString,true);
console.log(result);
结果如下:
通过第二个可选参数,可以很清楚的看到两者的区别:
将第二个可选参数设置为true,会使用querystring模块来解析URL中的查询字符串部分。
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])的第三个可选参数slashesDenoteHost默认为false
slashesDenoteHost : 当url是 ‘http://’ 或 ‘ftp://’ 等标志的协议前缀打头的,或直接以地址打头,
如 ‘127.0.0.1’ 或 ‘localhost’ 时候是没有区别的;当且仅当以2个斜杠打头的时候,比如 ‘//127.0.0.1’ 才有区别。
这时候,如果其值为true,则第一个单个 ‘/’ 之前的部分被解析为 ‘host’ 和 ‘hostname’,
如 ” host : ‘127.0.0.1’ “,如果为false,包括2个反斜杠在内的所有字符串被解析为pathname。
var url = require('url');
var urlString = '//host/path';
var result = url.parse(urlString,true,false);
console.log(result);
var url = require('url');
var urlString = '//host/path';
var result = url.parse(urlString,true,true);
console.log(result);
url.format(urlObj)将对象格式化为URL字符串
实例如下:
var url = require('url');
var urlObj = {
protocol: 'http:',
slashes: true,
auth: 'user:pass',
host: 'hosst.com:8080',
port: '8080',
hostname: 'hosst.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@hosst.com:8080/p/a/t/h?query=string#hash'
}
var result = url.format(urlObj);
console.log(result);
/*
*传入的URL对象会做以下处理:
*
*href 属性会被忽略
*protocol无论是否有末尾的 : (冒号),会同样的处理
*这些协议包括 http, https, ftp, gopher, file 后缀是 :// (冒号-斜杠-斜杠).
*所有其他的协议如 mailto, xmpp, aim, sftp, foo, 等 会加上后缀 : (冒号)
*auth 如果有将会出现.
*hostname 如果 host 属性没被定义,则会使用此属性.
*port 如果 host 属性没被定义,则会使用此属性.
*host 优先使用,将会替代 hostname 和port
*pathname 将会同样处理无论结尾是否有/ (斜杠)
*search 将会替代 query属性
*query (object类型; 详细请看 querystring) 如果没有 search,将会使用此属性.
*search 无论前面是否有 ? (问号),都会同样的处理
*hash无论前面是否有# (井号, 锚点),都会同样处理
*/
URL路径处理:url.resolve(from, to)
url.resolve()方法用于处理URL路径,也可以用于处理锚点。示例如下:
var url = require('url');
console.log(url.resolve('/one/two/three', 'four'));
console.log(url.resolve('http://example.com/', '/one'));
console.log(url.resolve('http://example.com/one', '/two'));