zoukankan      html  css  js  c++  java
  • nodeJS---URL相关模块用法(url和querystring)

    nodeJS---URL相关模块用法(url和querystring)

    一: URL模块:

    URL模块用于解析和处理URL的字符串,提供了如下三个方法:

    1. parse
    2. format
    3. resolve

    1.1 url.parse(urlString); 将url字符串地址转为一个对象。

    如下代码:

    const url = require('url');
    const urlString = url.parse('http://www.nodejs.org/some/url/?with=query&param=that#about');
    
    console.log(urlString);
    
    输出如下:
    // 输出:
    Url {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.nodejs.org',
      port: null,
      hostname: 'www.nodejs.org',
      hash: '#about',
      search: '?with=query&param=that',
      query: 'with=query&param=that',
      pathname: '/some/url/',
      path: '/some/url/?with=query&param=that',
      href: 'http://www.nodejs.org/some/url/?with=query&param=that#about'
    }

    protocal: url协议
    auth: 用户认证
    host: 主机
    port: 端口
    hostname: 主机名
    hash: 片段部分,也就是URL#之后的部分
    search: url中HTTP GET的信息,包含了 ?
    query: 和 search一样,但是不包含 ?
    pathname: 跟在host之后的整个文件路径。但是不包含 ? 及 ?之后的字符串。
    path: 和pathname一样,但是包含 ? 及之后的字符串,但是不包含hash
    href: 原始的url

    1.2 format方法。
    format方法与parse方法相反,用于根据某个对象生成URL的字符串。
    比如如下代码:

    const url = require('url');
    
    var urlObj = {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.nodejs.org',
      port: null,
      hostname: 'www.nodejs.org',
      hash: '#about',
      search: '?with=query&param=that',
      query: 'with=query&param=that',
      pathname: '/some/url/',
      path: '/some/url/?with=query&param=that',
      href: 'http://www.nodejs.org/some/url/?with=query&param=that#about'
    };
    console.log(url.format(urlObj));

    最后输出:http://www.nodejs.org/some/url/?with=query&param=that#about

    1.3 resolve方法

    resolve(from, to) 方法用于拼接URL, 它根据相对URL拼接成新的URL;

    如下代码:

    const url = require('url');
    
    var str1 = url.resolve('/one/two/three', 'four');
    
    console.log(str1); // 输出 /one/two/four
    
    const str2 = url.resolve('http://www.baidu.com', 'four');
    console.log(str2); // 输出 http://www.baidu.com/four
    
    const str3 = url.resolve('http://www.baidu.com/', '/four');
    console.log(str3); // 输出 http://www.baidu.com/four
    
    const str4 = url.resolve('http://www.baidu.com/one/', '/four');
    console.log(str4); // 输出 http://www.baidu.com/four

    二: querystring模块
    它用于解析与格式化url查询字符串。
    它提供了四个方法,分别是:querystring.parse, querystring.stringify, querystring.escape和querystring.unescape;

    2.1 querystring.parse(string, separator, eq, options);
    该方法是将一个字符串反序列化为一个对象。

    string: 指需要反序列化的字符串。
    separator(可选): 指用于分割字符串string的字符,默认为 &;
    eq(可选): 指用于划分键和值的字符和字符串,默认值为 "=";
    options(可选): 该参数是一个对象,里面可设置 maxKeys 和 decodeURIComponent 这两个属性。

    maxKeys: 传入一个nmuber类型,指定解析键值对的最大值,默认值为1000, 如果设置为0,则取消解析的数量限制。

    decodeURIComponent: 传入一个function, 用于对含有特殊字符进行编码。

    如下代码:

    const url = require('url');
    const querystring = require('querystring');
    const urlString = url.parse('http://www.nodejs.org/some/url/?with=query&param=that#about');
    
    console.log(urlString);
    /*
     {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.nodejs.org',
      port: null,
      hostname: 'www.nodejs.org',
      hash: '#about',
      search: '?with=query&param=that',
      query: 'with=query&param=that',
      pathname: '/some/url/',
      path: '/some/url/?with=query&param=that',
      href: 'http://www.nodejs.org/some/url/?with=query&param=that#about' }
     }
    */
    const str = querystring.parse(urlString.query);
    console.log(str);
    /*
     返回 
     { with: 'query', param: 'that' }
    */

    // 如果是以井号隔开的话,那么使用后面的参数
    const char = "with=query#param=that";
    // 输出 { with: 'query', param: 'that' }
    const str2 = querystring.parse(char, '#', null, {maxKeys: 2});

    2.2 querystring.stringify(obj, separator, eq, options);
    该方法是将一个对象序列化成一个字符串。

    参数:obj指需要序列化的对象;
    separator(可选),用于连接键值对的字符或字符串,默认为 &;
    eq(可选),用于连接键和值的字符或字符串,默认值为 "=";
    options(可选),传入一个对象,该对象设置 encodeURIComponent这个属性;
    encodeURIComponent:值的类型为function,可以将一个不安全的url字符串转换成百分比的形式,默认值为querystring.escape()。

    如下代码:

    const url = require('url');
    const querystring = require('querystring');
    
    // 如果是以井号隔开的话,那么使用后面的参数
    const char = "with=query#param=that";
    
    const str2 = querystring.parse(char, '#', null, {maxKeys: 2});
    // 输出 { with: 'query', param: 'that' }
    
    const str3 = querystring.stringify(str2);
    console.log(str3); // 输出 with=query&param=that
    
    // 如下使用 * 号分割,使用$符号链接
    const str4 = querystring.stringify({name: 'kongzhi', sex: [ 'man', 'women' ] }, "*", "$");
    console.log(str4); // name$kongzhi*sex$man*sex$women

    2.3 querystring.escape(str);

    escape该方法可使传入的字符串进行编码, 如下代码:

    const url = require('url');
    const querystring = require('querystring');
    
    // 如果是以井号隔开的话,那么使用后面的参数
    const char = "name=空智&sex=男";
    
    const res = querystring.escape(char);
    console.log(res);  // 输出 name%3D%E7%A9%BA%E6%99%BA%26sex%3D%E7%94%B7

    2.4 querystring.unescape(str);

    该方法是对 使用了 escape编码的字符进行解码;如下代码:

    const url = require('url');
    const querystring = require('querystring');
    
    // 如果是以井号隔开的话,那么使用后面的参数
    const char = "name=空智&sex=男";
    
    const res = querystring.escape(char);
    console.log(res);  // 输出 name%3D%E7%A9%BA%E6%99%BA%26sex%3D%E7%94%B7
    
    const res2 = querystring.unescape(res);
    console.log(res2); // name=空智&sex=男
  • 相关阅读:
    python2与python3 版本区别
    ORM 应用详解
    静态文件与APP
    Django框架简介,wsgiref 与 jinja2 模块
    Django框架的安装,项目创建
    自定义socket 模拟B/S服务端
    web框架原理,http 协议
    python 变量,输入,输出
    css 权重值(层叠性)详解
    css 的继承性
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/9064292.html
Copyright © 2011-2022 走看看