- NodeJs的介绍及使用
- Node.js核心模块概览
- NodeJs-Assertion Testing
- NodeJs-Asynchronous Context Tracking
- NodeJs-async_hooks
- NodeJs-Buffer
- Node.js- C++ Addons
- Node.js-C++ Addons Node-API
- NodeJs-C++ Embedder API
- Node.js-Child Process
- NodeJs-Cluster
- Node.js-命令行选项
- Node.js-Console
- Node.js-Corepack
- Node.js-Crypto
- NodeJs-Debugger
- NodeJs-Diagnostics Channel
- NodeJs-DNS
- NodeJs-Domain
- NodeJs-Errors
- NodeJs-Events
- NodeJs-File system(一)
- NodeJs-File system(二)
- NodeJs-File system(三)
- NodeJs-Globals
- NodeJs-HTTP
- NodeJs-HTTP/2
- NodeJs-HTTPS
- NodeJs-Inspector
- NodeJs-Internationalization
- NodeJs-Modules CommonJS modules、ECMAScript modules、node:module、Packages、TypeScript
- NodeJs-Net
- NodeJs-OS
- NodeJs-path
- NodeJs-Performance Hooks
- NodeJs-Permissions
- NodeJs-process
- NodeJs-punycode
- Node.js-querystring
- NodeJs-Readline
- NodeJs-REPL
- NodeJs-Report
- NodeJs-Single Executable Applications
- NodeJs-SQLite
- NodeJs-Stream
- NodeJs-String Decoder
- NodeJs-Test runner
- NodeJs-Timers
- NodeJs-TLS/SSL
- NodeJs-Trace events
- NodeJs-TTY
- NodeJs-UDP/datagram
- NodeJs-URL
- NodeJs-Utilities
- NodeJs-V8
- NodeJs-VM
- NodeJs-WASI
- NodeJs-Web Crypto API
- NodeJs Web Streams API
- NodeJs Worker threads
- NodeJs-Zlib
- NodeJs-Single Executable Applications
Node.js-querystring
class querystring在 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,它具备更好的功能和更强的兼容性。