项目中在前端层获取后端数据,用axios拦截器实现下划线到驼峰层转变

74 阅读1分钟
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;
}

效果:使用拦截器后

image.png

使用拦截器前

image.png

拦截器我理解是一个api相关的工具,所以目录放在api/utils/intercepter.js即可 在主项目的main.js中进行import后,全局axios发送的方法都会走拦截。