axios统一处理params中数组、object传参

// 创建axios实例
const service = axios.create({
withCredentials: true, // 允许携带cookie

/**
* 处理所有使用 params 传递的数组、对象等数据,将其转换成JSON字符串
* data 中包含数组、对象等数据时,并不会进行处理
* 处理数组和对象的函数,会保留数组中数据类型
// 原始参数
{
ids: [1, 2, 3], // 数字数组
name: "test", // 字符串
active: true, // 布尔值
extra: null // null
}

// 转换后
"ids=%5B1%2C2%2C3%5D&name=%22test%22&active=true&extra=null"
// 解码后相当于:
ids=[1,2,3]&name="test"&active=true&extra=null
*/
paramsSerializer: function (params) {
const processedParams = Object.keys(params).reduce((acc, key) => {
if (
Array.isArray(params[key]) ||
typeof params[key] === 'object'
) {
acc[key] = JSON.stringify(params[key]) // 保持原始数据类型
} else {
acc[key] = params[key] // 基本类型直接保留
}
return acc
}, {})
return qs.stringify(processedParams)
},
})
展开
评论