get傳遞數組報錯400非法格式?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章