Node.js-querystring

 后端   小卒子   2024-09-08 13:20   148
  nodejs

Node.js 中,querystring 模块提供了用于处理 URL 查询字符串的实用工具。它可以将查询字符串解析为对象,也可以将对象序列化为查询字符串。

需要注意的是,从 Node.js v11.0.0 开始,querystring 模块已经被标记为过时(deprecated),推荐使用 URLSearchParams API,它提供了更强大、更现代化的替代方案。不过,querystring 仍然存在并且可以使用。

1. Query Strings 模块概述

querystring 模块用于处理 URL 中的查询字符串。查询字符串是附加在 URL 后面的键值对,用于传递参数信息。例如,http://example.com?name=John&age=30 中的 name=John&age=30 就是查询字符串。这个模块的主要功能是将查询字符串解析成对象,或者将对象序列化为查询字符串。

2. Query Strings 的属性与方法

2.1 querystring.parse()

querystring.parse() 用于将 URL 查询字符串解析为对象。

语法:

querystring.parse(str[, sep[, eq[, options]]])
  • str: 要解析的查询字符串。
  • sep: 可选,指定键值对的分隔符,默认为 '&'
  • eq: 可选,指定键和值之间的分隔符,默认为 '='
  • options: 可选,包含以下属性:
    • decodeURIComponent: 解码查询字符串中编码字符的函数,默认为 decodeURIComponent
    • maxKeys: 限制解析后的键数量,默认无限制。

示例:

const querystring = require('querystring');

const queryString = 'name=John&age=30&city=New+York';
const parsed = querystring.parse(queryString);

console.log(parsed);  // 输出:{ name: 'John', age: '30', city: 'New York' }

在这里,querystring.parse() 将查询字符串 name=John&age=30&city=New+York 解析为对象 { name: 'John', age: '30', city: 'New York' }

自定义分隔符:

const queryString = 'name:John;age:30;city:New York';
const parsed = querystring.parse(queryString, ';', ':');

console.log(parsed);  // 输出:{ name: 'John', age: '30', city: 'New York' }

在这个例子中,使用了分号 (;) 作为键值对的分隔符,冒号 (:) 作为键和值之间的分隔符。

2.2 querystring.stringify()

querystring.stringify() 用于将对象序列化为查询字符串。

语法:

querystring.stringify(obj[, sep[, eq[, options]]])
  • obj: 要序列化的对象。
  • sep: 可选,指定键值对的分隔符,默认为 '&'
  • eq: 可选,指定键和值之间的分隔符,默认为 '='
  • options: 可选,包含以下属性:
    • encodeURIComponent: 编码查询字符串中字符的函数,默认为 encodeURIComponent

示例:

const querystring = require('querystring');

const obj = { name: 'John', age: 30, city: 'New York' };
const queryString = querystring.stringify(obj);

console.log(queryString);  // 输出: 'name=John&age=30&city=New+York'

在这里,querystring.stringify() 将对象 { name: 'John', age: 30, city: 'New York' } 序列化为查询字符串 name=John&age=30&city=New+York

自定义分隔符:

const obj = { name: 'John', age: 30, city: 'New York' };
const queryString = querystring.stringify(obj, ';', ':');

console.log(queryString);  // 输出: 'name:John;age:30;city:New+York'

在这个例子中,使用了分号 (;) 作为键值对的分隔符,冒号 (:) 作为键和值之间的分隔符。

2.3 querystring.escape()

querystring.escape() 用于编码查询字符串中的特殊字符。该函数使用 encodeURIComponent 编码 URL 中的组件。

语法:

querystring.escape(str);
  • str: 要编码的字符串。

示例:

const querystring = require('querystring');

const encoded = querystring.escape('New York');

console.log(encoded);  // 输出: 'New%20York'

在这里,querystring.escape() 将字符串 New York 编码为 New%20York

2.4 querystring.unescape()

querystring.unescape() 用于解码查询字符串中被编码的特殊字符。该函数使用 decodeURIComponent 来解码 URL 组件。

语法:

querystring.unescape(str);
  • str: 要解码的字符串。

示例:

const querystring = require('querystring');

const decoded = querystring.unescape('New%20York');

console.log(decoded);  // 输出: 'New York'

在这里,querystring.unescape()New%20York 解码为 New York

3. Query Strings 使用示例

以下是一个综合示例,展示了如何使用 querystring 模块的各个方法来解析和生成查询字符串:

const querystring = require('querystring');

// 将查询字符串解析为对象
const queryString = 'name=John&age=30&city=New+York';
const parsed = querystring.parse(queryString);
console.log(parsed);  // 输出:{ name: 'John', age: '30', city: 'New York' }

// 将对象序列化为查询字符串
const obj = { name: 'Jane', age: 25, city: 'Los Angeles' };
const stringified = querystring.stringify(obj);
console.log(stringified);  // 输出: 'name=Jane&age=25&city=Los+Angeles'

// 自定义分隔符的解析与序列化
const customQueryString = 'name:John;age:30;city:New York';
const customParsed = querystring.parse(customQueryString, ';', ':');
console.log(customParsed);  // 输出:{ name: 'John', age: '30', city: 'New York' }

const customObj = { name: 'Jane', age: 25, city: 'Los Angeles' };
const customStringified = querystring.stringify(customObj, ';', ':');
console.log(customStringified);  // 输出: 'name:Jane;age:25;city:Los+Angeles'

// 编码与解码 URL 组件
const encoded = querystring.escape('Los Angeles');
console.log(encoded);  // 输出: 'Los%20Angeles'

const decoded = querystring.unescape('Los%20Angeles');
console.log(decoded);  // 输出: 'Los Angeles'

4. 总结

querystring 模块是用于处理 URL 查询字符串的工具,提供了解析与生成查询字符串的简单方法。尽管已被标记为过时,但在处理旧项目或简单应用时仍然非常有用。对于新的应用,推荐使用更现代的 URLSearchParams API,它具备更好的功能和更强的兼容性。