url和querystring模块

url模块

url 模块主要用于对 URL 地址进行解析,使用该模块时,需要使用 require() 函数进行引入,其语法格式如下:

const url = require('url')
image 2024 04 16 14 22 22 425
Figure 1. 表11.1 url模块的主要方法

url 模块的主要方法如表 11.1 所示。例如,下面代码使用 url 模块的 parse() 方法将一个 url 网址转换成 url 对象,代码如下:

//使用url模块
var url = require('url');
//调用parse方法
var parsedObject = url.parse('https://www.mingrisoft.com/systemCatalog/26.html');
console.log(parsedObject);

上面代码的运行结果如图 11.5 所示。

image 2024 04 16 14 25 27 588
Figure 2. 图11.5 使用url模块中的方法

Node.js 中,url.parse() 方法已被废弃,推荐使用 new URL() 构造函数来代替。

url.parse() 方法是用于解析 URL 字符串并返回 URL 对象的方法,它可以解析 URL 字符串中的协议、主机名、端口号、路径、查询参数等信息,并以键值对的形式存储在 URL 对象中。但是由于它的参数过于复杂且容易出错,同时在处理一些特殊的 URL 时也存在一些问题,所以 Node.js 官方在最新版本中已经废弃了该方法。

相比之下,new URL() 构造函数在使用上更加简单明了,同时也能够处理更多的 URL 情况。它接受一个 URL 字符串作为参数,返回一个 URL 对象,该对象包含与 URL 相关的所有属性。使用该构造函数时,只需将 URL 字符串作为参数传入即可,例如:

const myURL = new URL('https://www.example.com/path?id=100&name=test');

此时,myURL 对象将包含 https://www.example.com 作为主机名,/path 作为路径,id=100&name=test 作为查询参数等信息。

图 11.5 中转换后的 url 对象的各个参数说明如下,了解即可。

  • protocol:协议。

  • slashes:是否含有协议的 “//”。

  • auth:认证信息,如果有密码,为 usrname:passwd,否则为 null

  • host:IP地址、域名或主机名。

  • port:端口(默认 8080 不显示)。

  • hostname:主机名字。

  • hash:锚点值。

  • search:查询字符串参数,包含 “?”。

  • query:查询字符串参数,不包含 “?”。

  • pathname:访问的资源路径名。

  • path:访问的资源路径。

  • href:完整的 url 地址。

querystring模块

querystring 模块用于实现 URL 参数字符串与参数对象之间的互相转换,其引入语法如下:

const querystring=require('querystring')

querystring 模块的主要方法如表11.2所示

image 2024 04 16 14 33 38 014
Figure 3. 表11.2 querystring模块的主要方法

例如,下面代码首先使用 url 模块将一个网址转换为 url 对象,然后使用 querystring 模块的 parse() 方法获取 url 中的查询字符串,并转换为 JSON 对象进行输出,代码如下:

//使用url模块和querystring模块
var url = require('url');
var querystring = require('querystring');
var parsedObject =
  url.parse('https://search.jd.com/Search?keyword=java&enc=utf-8&wq=java&pvid=425de9f31d014547807ff3ab31e81af1');
console.log(querystring.parse(parsedObject.query));

上面代码的运行结果如下:

[Object: null prototype] {
  keyword: 'java',
  enc: 'utf-8',
  wq: 'java',
  pvid: '425de9f31d014547807ff3ab31e81af1'
}