背景:前几天用qs处理请求参数,没啥问题,后端接收的轻轻松松,今天遇到一个坑,qs直接处理list,后端根本接收不到,会提示请求参数不是list、map、array类型。
- 安装qs
npm install qs
,如果已经安装了axios的话,就不需要再安装了,直接引入import Qs from 'qs'
; - qs有两种使用方式
//1. qs.parse()将URL解析成对象的形式
let url = 'userName=12212&pwd=123&token=120';
Qs.parse(url);
//处理后的结果{"userName": 12212, "pwd": 123, "token": 120}
//2. qs.stringify()将对象 序列化成URL的形式,以&进行拼接
let data = {"userName": 12212, "pwd": 123, "token": 120};
Qs.stringify(data)
//处理后结果 userName=12212&pwd=123&token=120
Qs.stringify({ a: ['b', 'c', 'd'] });
// 'a[0]=b&a[1]=c&a[2]=d'
Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
// 'a=b&a=c&a=d'
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'
Qs.stringify({ a: [{"userName": 12212},{"pwd": 123}],{arrayFormat: 'indices', allowDots: true})
// a[0].userName=12212&a[0].pwd=123
我遇到问题就是请求参数的结构是{a,b,c,[{d,e},{f,g}]},使用前几种都无法让后端接收到参数,只有之后一种才符合要求,并发送成功。根据自己需要的参数格式,选择合适的qs。