querystring 解析与序列化 URL 查询串:querystring."> querystring 解析与序列化 URL 查询串:querystring."> querystring 解析与序列化 URL 查询串:querystring.">
Node.js 词条目录
前端Wiki/Node.js/深入/Buffer 与 URL

querystring 与 url 模块

querystring 解析与序列化 URL 查询串:querystring.parse('a=1&b=2') 得到对象,stringify({a:1}) 还原成字符串(中文自动编码)。新版项目可直接上 URLSearchParams,API 更现代。

url.parse 把完整地址拆成 protocol/host/pathname/search/hash 等字段;它第二个参数传 true 会顺带把 query 解析成对象。拿到 pathname 后即可做路由匹配。

  • querystring.parse:把 a=1&b=2 变成 {a: 1, b: 2}
  • URLSearchParams现代化的查询串接口(get/set/toString)
  • url.parse 拆 url:pathname 干净路径、search 含 ?、query 解析对象
JS
const qs = require('querystring');
const url = require('url');

// 解析查询串
const q = qs.parse('id=1&city=%E6%9D%AD%E5%B7%9E');
console.log(q);                       // { id: '1', city: '杭州' }

// 序列化(中文自动 encodeURIComponent)
console.log(qs.stringify({ page: 2, kw: 'Node 教程' }));  // page=2&kw=Node%20%E6%95%99%E7%A8%8B

// 拆解完整 URL
const parsed = url.parse('https://a.com/users/42?tab=info#top', true);
console.log(parsed.protocol);   // https:
console.log(parsed.host);       // a.com
console.log(parsed.pathname);   // /users/42
console.log(parsed.query);      // { tab: 'info' }
console.log(parsed.hash);       // #top

// 现代写法:URLSearchParams
const sp = new URLSearchParams('?a=1&b=2');
sp.set('c', '3');
console.log(sp.get('a'), sp.toString());   // 1 a=1&b=2&c=3
本节要点querystring 管查询串编解码,url.parse 管地址拆解;新代码可直接用 URLSearchParams + new URL。