Node.js querystring 模块
querystring 是 Node.js 内置的核心模块,专门用于解析和格式化 URL 查询字符串(query string)。查询字符串是 URL 中问号(?)后面的部分,通常由键值对组成,例如:?name=John&age=30
。
这个模块在前端与后端数据传输、API 开发等场景中非常实用,能够帮助开发者轻松处理 URL 参数。
核心方法解析
querystring.parse(str[, sep[, eq[, options]]])
将查询字符串解析为 JavaScript 对象。
参数说明:
str
:要解析的查询字符串sep
(可选):用于分隔键值对的分隔符,默认为'&'
eq
(可选):用于分隔键和值的分隔符,默认为'='
options
(可选):配置对象maxKeys
:指定解析的最大键数,默认为 1000decodeURIComponent
:用于解码的函数,默认为querystring.unescape()
示例代码:
实例
const query = 'name=John&age=30&city=New+York';
const parsed = querystring.parse(query);
console.log(parsed);
// 输出: { name: 'John', age: '30', city: 'New York' }
querystring.stringify(obj[, sep[, eq[, options]]])
将 JavaScript 对象序列化为查询字符串。
参数说明:
obj
:要序列化的对象sep
(可选):键值对分隔符,默认为'&'
eq
(可选):键值分隔符,默认为'='
options
(可选):配置对象encodeURIComponent
:用于编码的函数,默认为querystring.escape()
示例代码:
实例
const obj = {
name: 'John Doe',
age: 25,
occupation: 'Software Developer'
};
const stringified = querystring.stringify(obj);
console.log(stringified);
// 输出: 'name=John%20Doe&age=25&occupation=Software%20Developer'
querystring.escape(str) 和 querystring.unescape(str)
这两个方法分别用于编码和解码查询字符串中的特殊字符。
示例代码:
实例
const str = 'Hello World!';
const escaped = querystring.escape(str);
console.log(escaped); // 输出: 'Hello%20World%21'
const unescaped = querystring.unescape(escaped);
console.log(unescaped); // 输出: 'Hello World!'
实际应用场景
1. 处理 GET 请求参数
实例
const querystring = require('querystring');
http.createServer((req, res) => {
if (req.url.includes('?')) {
const queryString = req.url.split('?')[1];
const params = querystring.parse(queryString);
console.log(params);
res.end(`Received parameters: ${JSON.stringify(params)}`);
} else {
res.end('No query parameters received');
}
}).listen(3000);
2. 构建 API 查询字符串
实例
const apiParams = {
q: 'node.js',
page: 1,
limit: 10,
sort: 'desc'
};
const apiUrl = `https://api.example.com/search?${querystring.stringify(apiParams)}`;
console.log(apiUrl);
// 输出: 'https://api.example.com/search?q=node.js&page=1&limit=10&sort=desc'
注意事项
编码问题:默认情况下,querystring 会对特殊字符进行编码/解码。如果需要自定义编码方式,可以传入
encodeURIComponent
或decodeURIComponent
函数。数据类型:所有解析出来的值都是字符串类型,需要手动转换为其他类型(如数字、布尔值等)。
嵌套对象:querystring 模块不支持嵌套对象的解析和序列化。如果需要处理复杂数据结构,可以考虑使用 JSON 格式。
URL 安全字符:空格会被编码为
+
而不是%20
,这与encodeURIComponent
的行为不同。
替代方案
虽然 querystring 模块很实用,但 Node.js 的较新版本推荐使用 URL 和 URLSearchParams API,它们提供了更现代、更全面的 URL 处理功能。
实例
const params = new URLSearchParams('name=John&age=30');
console.log(params.get('name')); // 输出: 'John'
总结
querystring 模块是 Node.js 中处理查询字符串的利器,特别适合处理简单的键值对数据。掌握它的核心方法(parse、stringify、escape、unescape)能够大大提高开发效率。对于更复杂的 URL 处理需求,可以考虑使用 URL 和 URLSearchParams API。
点我分享笔记