qs.stringify的使用
条评论开发过程中, get 方式请求可能遇到以下场景
1 | 1、get请求中存在数组对象 |
例如:
1 | query: { |
这时可以使用qs来进行简化解析过程
1 | let url = qs.stringify(params, {allowDots: true,skipNulls: true}); |
通过使用 skipNulls: true ,可以过滤掉没有值的参数还
接下来对qs做个详细的记录
- qs是什么?
qs.stringify()作用是将对象或者数组序列化成URL的格式。
qs是一个npm仓库所管理的包,可通过
npm install qs
命令进行安装(axios 自带qs , // import qs from ‘qs’)
基本用法
- qs.parse()将URL解析成对象的形式:
1 | let url = 'user=mak&pwd=123456' |
- qs.stringify()将对象 序列化成URL的形式,以&进行拼接
qs.stringify 是把一个参数对象格式化为一个字符串。
1 | let obj= { |
指定数组编码格式
当我们需要传递数组的时候,我们就可以通过下面方式进行处理: 默认情况下,它们给出明确的索引,如下代码:
1 | qs.stringify({ a: ['b', 'c', 'd'] }); |
qs.stringify({ a: [‘b’, ‘c’, ‘d’] }, { indices: false });
// ‘a=b&a=c&a=d’
1 | 也可以通过arrayFormat 选项进行格式化输出,如下代码所示: |
// indices(默认)
qs.stringify({ a: [‘b’, ‘c’] }, { arrayFormat: ‘indices’ })
// ‘a[0]=b&a[1]=c’
qs.stringify({ a: [‘b’, ‘c’] }, { arrayFormat: ‘brackets’ })
// ‘a[]=b&a[]=c’
qs.stringify({ a: [‘b’, ‘c’] }, { arrayFormat: ‘repeat’ })
// ‘a=b&a=c’
1 | > 需要注意的是,JSON中同样存在stringify方法,但是两者之间的区别是很明显的,如下所示: |
let json = { a: { b: { c: ‘d’, e: ‘f’ } } };
qs.stringify(json);
//结果 ‘a[b][c]=d&a[b][e]=f’
1 |
|
qs.stringify(json, {allowDots: true});
//结果 ‘a.b.c=d&a.b.e=f’
1 | ### qs.stringify详解 |
const qs = require(‘qs’);
axios.post(‘/foo’, qs.stringify({ ‘bar’: 123 }));
1 |
|
import qs from ‘qs’;
const data = { ‘bar’: 123 };
const options = {
method: ‘POST’,
headers: { ‘content-type’: ‘application/x-www-form-urlencoded’ },
data: qs.stringify(data),
url,
};
axios(options);
1 | > 详解: axios默认的content-type是application/json 也就是java后端经常让你把参数放在body中的那种格式 传输的样式是 requestbody |
{
name:xxx,
age:xxx
}
1 | 如果使用的qs进行序列化 那么content-type就是application/x-www-form-urlencoded 也就是常说的表单提交 传输的样式是 formdata |
name:xxx,
age:xxx
1 | > urlencoding后是 name=xxx&age=xxx |
var a={“a1”: “hello”, “a2”: “hi”}
qs.stringify(a);
// 结果是:a1=hello&a2=hi
JSON.stringify(a);
// 结果是:‘{“a1”: “hello”, “a2”: “hi”}’