使用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'