url 模块学习笔记

使用场景:

  • url 模块经常与 querystring 模块联合使用;
  • 如果你想要对浏览器地址栏里的地址进行处理可以使用这个模块;
  • 处理过程无非两个方法,将地址栏的字符串解析为对象和将一个对象变成一个 url 地址;
  • 此外,你可能还需要获得 url 地址中携带的参数,像这样 www.xxx.com?name=bob&age=21。

如果你没有以上需求,可以略过以下部分以节约你的时间。

原生模块

url 模块是 node.js 原生自带的库,无需安装,直接通过 var url = require('url') 就可以使用。


parse()

  • 作用: 将 url 字符串变成对象
  • 示例代码: 新建 parse.js 文件,内容如下:

      var url = require('url');
    
      var urlString = 'http://user:[email protected]:8080/p/a/t/h?query=string#hash';
      var result = url.parse(urlString);
      console.log(result);
    

    打印结果如下:

      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:[email protected]:8080/p/a/t/h?query=string#hash' }
    
  • 对象属性详解

      href: 解析前的完整原始 URL,协议名和主机名已转为小写
      例如: 'http://user:[email protected]: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'
    

format()

  • 作用: 将符合条件的对象变成 url 字符串
  • 示例代码: 新建 format.js 文件,内容如下:

      var url = require('url');
    
      var urlObj = { 
        protocol: 'http:',
          slashes: true,
          hostname: 'itbilu.com',
          port: 80,
          hash: '#hash',
          search: '?query=string',
          path: '/nodejs?query=string'
      }
      var result = url.format(urlObj);
      console.log(result);
    

    打印结果如下:

      http://itbilu.com:80?query=string#hash
    
  • 转换机理简单介绍

      *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无论前面是否有# (井号, 锚点),都会同样处理
    

参考简书作者:明明三省

results matching ""

    No results matching ""