数据处理 - 多平台接口状态码header请求封装方案

数据处理 - 多平台接口状态码header请求封装方案

统一标准

  1. 状态码
  2. header

区分处理

一起传入

{
  "headers": {
    "token": "",
    "plant1-token": "",
    "plant2-token": ""
  }
}

分平台处理

!!!warning key 需为平台api公共部分

const headersObj = {
  default: {},
  plant1: {},
  key:{}
};

//创建axios实例
const service = axios.create({
  headers: {
    // common headers
    'Content-Type': 'application/json;charset=utf-8',
  },
});

//request(请求)拦截器
service.interceptors.request.use(
  (config) => {
    startLoading();
    for (let [key, val] of Object.entries(headersObj)) {
      if (config.url.includes(key)) { // !!! key 需为平台api公共部分
        Object.assign(config.headers, val);
        break;
      }
    }
    return config;
  },
  (error) => {
    Message.error({ message: '请求超时!' });
    Promise.reject(error)
  }
);

状态码

统一判断

注意避免冲突,同一状态码不能在不同平台属于不同状态

const statusCode = {
  success: [1, 1000],
  error: [0, 1001],
  timeout: [2, 1002],
};

// respone响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    if (response.status === 200) {
      if (statusCode.success.includes(res.code)) {
        return res;
      }
      if (statusCode.error.includes(res.code)) {
        Message({
          type: 'error',
          duration: 1000,
          message: res.result.message ? res.result.message : '接口请求异常',
        });
        return res;
      } else {
        return res;
      }
    }
  },
  async (err) => {
    message.error(err.message);
    return Promise.reject(err);
  }
);

分平台判断

  • 不需要避免冲突
  • !!!warning key 需为平台api公共部分
const statusCode = {
  default: {
    success: 1,
    error: 0,
    timeout: 2,
  },
  plant1: {
    success: 1000,
    error: 1001,
    timeout: 0,
  },
};

// respone响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    if (response.status === 200) {
      let plantstatusCode = Object.entries(statusCode).find(
        ([key, val]) => response.config.url.includes(key)  // !!! key 需为平台api公共部分
      )[1];
      if (plantstatusCode.success == res.code) {
        return res;
      }
      if (plantstatusCode.error == res.code) {
        Message({
          type: 'error',
          duration: 1000,
          message: res.result.message ? res.result.message : '接口请求异常',
        });
        return res;
      } else {
        return res;
      }
    }
  },
  async (err) => {
    message.error(err.message);
    return Promise.reject(err);
  }
);
posted @ 2022-01-26 15:26  zc-lee  阅读(125)  评论(0编辑  收藏  举报