当前位置 主页 > 网站技术 > 代码类 >

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

    栏目:代码类 时间:2020-02-06 15:06

    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));
    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: '小火柴' },
     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,true));
    var url = require('url');
    var str = '//foo/bar';
    var result1 = url.parse(str,true);
    var result2 = url.parse(str,true,true);
    console.log(result1.path);//'//foo/bar'
    console.log(result1.pathname);//'//foo/bar'
    console.log(result1.hostname);//null
    console.log(result2.path);//'/bar'
    console.log(result2.pathname);//'/bar'
    console.log(result2.hostname);//'foo'