使用axios通过get方法,传递params参数为数组时,数组一般会以以下的方式进行拼接:
arr = [1,2,3]
http://localhost:8080/api/?arr[]=1&arr[]=2&arr[]=3
但是后台给的格式是:
http://localhost:8080/api/?arr=1&arr=2&arr=3
这样就会产生400(bad request,请求报文存在语法错误)
解决:
import qs from 'qs';
service.interceptors.request.use(
config => {
if (config.method === 'get') {
config.paramsSerializer = function(params) {
return qs.stringify(params, { arrayFormat: 'repeat' });
};
}
return config;
}
);
qs是什么?
qs插件的git地址:https://www.npmjs.com/package/qs
qs是一个具有安全性的查询字符串解析和字符串化的类库
我们可以使用arrayFormat来规定数组输出的格式:
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: ['b', 'c'] }, { arrayFormat: 'comma' })
// 'a=b,c'