axios.interceptors.response.use(
(res) => {
//请求成功对响应数据进行处理
// console.log("拦截到了返回");
// console.log(res);
res.data = handleData(res.data);
// 只修改了res.data
return res;
},
(err) => {
//响应错误做些什么(此处错误,到达后端后返回)
return Promise.reject(err);
}
);
function handleData(data) {
// 直接从数据库捞的数据可能没转换
// 可能是数组,可能只是对象
if (Array.isArray(data)) {
// 对象数组
let result = [];
data.forEach((x) => {
result.push(getNewObj(x));
});
return result;
} else {
// 单纯是对象
return getNewObj(data);
}
}
function getNewObj(obj) {
let newObj = {};
for (let [key, value] of Object.entries(obj)) {
newObj[hanldeToTf(key)] = value;
}
return newObj;
}
function hanldeToTf(str) {
const reg1 = /_([a-zA-Z])/;
if (reg1.test(str)) {
str = str.replace(reg1, (...args) => {
return args[1].toUpperCase();
});
return hanldeToTf(str);
}
return str;
}
效果:使用拦截器后
使用拦截器前
拦截器我理解是一个api相关的工具,所以目录放在api/utils/intercepter.js即可 在主项目的main.js中进行import后,全局axios发送的方法都会走拦截。