Skip to content

qs vs querystring

querystring

querystring是官方提供包, 有6个方法,分别是 encode/stringify、decode/parse、escape、unescape,
其中 encode 是 stringify 的别名, decode 是 parse 的别名, 而 escape 和 unescape, 官方不推荐使用,所以这里只讨论 stringify 和 parse

引入 querystring

js
import querystring from 'querystring';
// 或
const querystring = require('querystring');
  • querystring.stringify
    对对象做字符串化处理,默认处理成 get 参数格式
js
querystring.stringify({a: 1, b: 2, c:3});
// output: a=1&b=2&c=3

包含 4 个参数,分别是 (数据, 键值间分隔符,键值分隔符,是否编码), 默认编码

js
querystring.stringify({a: 1, b: 2, c:3}, '&', '=');
// output: a=1&b=2&c=3

需要注意的是如果给定的变量中包含数组, 不建议直接放到GET参数中使用,这是一个坑, 比如下面这段代码

js
querystring.stringify({a: [1,2,3]});
// output: a=1&a=2&a=3

服务器也许只能接收到 a=3, 通常情况下,服务器需要GET值 a[]=1&a[]=2&a[]=3, 这时候需要 qs 上场了.

  • qs.stringify

引入方式

js
import qs from 'qs';
// 或
const qs = require('qs');

这是 qs 对 {a: [1,2,3]} 做的处理,不但直接 encode 了,而且更符合服务器接收的方式

js
qs.stringify({a: [1,2,3]});
// output: a%5B0%5D=1&a%5B1%5D=2&a%5B2%5D=3

但是 qs 是第三方包,使用时需要 npm install qs -E

另外 qs 还有别的惊艳功能比如

js
qs.parse('a[b]=c')
// output: { a: { b: 'c' } }

参考