在 Node.js 环境中,采用 querystring 模块来解析 URL 查询参数时,具体操作步骤是怎样的?
考察说明
考查对 Node.js 内置 querystring 模块基本 API 的掌握情况。
回答思路
- 【回答框架 1】querystring 是 Node.js 内置模块,用于解析和序列化 URL 查询字符串。核心方法包括 parse、stringify 和 escape/unescape。
- 【回答框架 2】使用 parse 方法可将查询字符串解析为对象,例如 querystring.parse('foo=bar&baz=qux') 得到 { foo: 'bar', baz: 'qux' }。它支持第二个参数自定义分隔符,默认是 '&'。
- 【回答框架 3】解析过程中,querystring.parse 会解码百分号编码的字符,例如 %20 会转换为空格。如果参数键出现多次,默认情况下后者会覆盖前者;若要保持所有值,可使用第三个参数 maxKeys 设为 0,实现如 { key: [ 'val1', 'val2' ] } 的形式。
- 【回答框架 4】stringify 方法则用于将对象序列化为查询字符串,例如 querystring.stringify({ foo: 'bar', baz: 'qux' }) 得到 'foo=bar&baz=qux'。它会自动对特殊字符进行 URL 编码。
- 【回答框架 5】在 HTTP 请求处理中,通常从 req.url 中提取查询部分,使用 url.parse 或 URL 构造函数配合 querystring 来解析参数。
- 【关键点 1】querystring.parse 用于解析查询字符串为对象,stringify 用于反向序列化。
- 【关键点 2】parse 默认按 & 分隔键值对,以 = 连接键和值。
- 【关键点 3】parse 支持 maxKeys 参数控制解析键值对数量,设置为 0 时无限制。
- 【关键点 4】解析后的值会自动进行 URL 解码,如需保留重复键,需设置 maxKeys 为 0。
- 【易错点 1】不要将 querystring 与 URL 模块的 searchParams 混淆,后者是 WHATWG URL API 的一部分,使用方式略有不同。
- 【易错点 2】parse 方法不会处理嵌套对象,即不会将 foo[bar]=baz 解析为嵌套对象,而是得到键名 'foo[bar]'。
- 【易错点 3】当参数存在多个相同键时,默认只保留最后一个值,若需全部值必须显式设置 maxKeys。