Node.js querystring 模块

Java FileNode.js 内置模块


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:指定解析的最大键数,默认为 1000
    • decodeURIComponent:用于解码的函数,默认为 querystring.unescape()

示例代码:

实例

const querystring = require('querystring');

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 querystring = require('querystring');

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 querystring = require('querystring');

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 http = require('http');
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 querystring = require('querystring');

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'

注意事项

  1. 编码问题:默认情况下,querystring 会对特殊字符进行编码/解码。如果需要自定义编码方式,可以传入 encodeURIComponentdecodeURIComponent 函数。

  2. 数据类型:所有解析出来的值都是字符串类型,需要手动转换为其他类型(如数字、布尔值等)。

  3. 嵌套对象:querystring 模块不支持嵌套对象的解析和序列化。如果需要处理复杂数据结构,可以考虑使用 JSON 格式。

  4. URL 安全字符:空格会被编码为 + 而不是 %20,这与 encodeURIComponent 的行为不同。


替代方案

虽然 querystring 模块很实用,但 Node.js 的较新版本推荐使用 URL 和 URLSearchParams API,它们提供了更现代、更全面的 URL 处理功能。

实例

// 使用 URLSearchParams 的示例
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。

Java FileNode.js 内置模块