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=男

最新文章

  1. ASP.NET中控件命名规则
  2. [stm32] SIM808模块之发短信\GPS\TCP\HTTP研究
  3. unity打包模型存在的一个问题
  4. phpcms不显示验证码
  5. B.xml
  6. Google Analytics:为链接点击设定事件追踪的方法
  7. WebApi 文件上传
  8. C# 使用IENUMERABLE,YIELD
  9. JDBC连接数据库(MySQL)
  10. 阿里云服务器(Windows)如何下载文件
  11. ArcGIS 网络分析[1.3] 在个人地理数据库中创建网络数据集/并简单试验最佳路径
  12. K:哈弗曼树
  13. Android图标
  14. ubuntu16.04SSH无法连接
  15. Docker Compose 介绍安装
  16. Nginx 入门指南
  17. 11.js循环与函数
  18. SQL SERVER 查看SQL语句IO,时间,索引消耗
  19. thinkphp 在阿里云上的nginx.config配置
  20. spring security+cas(cas proxy配置)

热门文章

  1. Tomcat报failed to parse the expression [${xxx}]异常(javax.el.ELException)的解决方法
  2. 140 - The 12th Zhejiang Provincial Collegiate Programming Contest(第三部分)
  3. Python 多线程、多进程 (三)之 线程进程对比、多进程
  4. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
  5. webpack单独打包一个less文件
  6. 理解微信小程序Wepy框架的三个事件交互$broadcast,$emit,$invoke
  7. 你的BI应用处于什么阶段?解读Gartner BI成熟度模型
  8. XSS(跨站脚本攻击)漏洞解决方案
  9. (网页)jQuery UI 实例 - 日期选择器(Datepicker)
  10. puppeteer入门