使用node.JS中的url模块解析URL信息

2020-06-17 08:01:32易采站长站整理

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',