美文网首页
axios interceptors error 处理

axios interceptors error 处理

作者: 想溜了的蜗牛 | 来源:发表于2020-12-22 14:18 被阅读0次

    待整理

    参考:

    1. how to handle common error pages in react and axios?
      这个用的HOC的方式, 包住 APP, 可以全局处理 503,404 等问题,也还算方便

    2. Handling Axios error in React
      这个不是在 interceptors 里处理,就单个请求处理,不是很好

    3. React: Handling Errors with Axios Interceptor and Redux
      这个貌似可以用,

    4. 参考 基于Vue的前端架构,我做了这15点 - 5.异步请求

    import axios from 'axios';
    import get from 'lodash/get';
    import storage from 'store';
    // 创建 axios 实例
    const request = axios.create({
     // API 请求的默认前缀
     baseURL: process.env.VUE_APP_BASE_URL,
     timeout: 10000, // 请求超时时间
    });
    
    // 异常拦截处理器
    const errorHandler = (error) => {
     const status = get(error, 'response.status');
     switch (status) {
       /* eslint-disable no-param-reassign */
       case 400: error.message = '请求错误'; break;
       case 401: error.message = '未授权,请登录'; break;
       case 403: error.message = '拒绝访问'; break;
       case 404: error.message = `请求地址出错: ${error.response.config.url}`; break;
       case 408: error.message = '请求超时'; break;
       case 500: error.message = '服务器内部错误'; break;
       case 501: error.message = '服务未实现'; break;
       case 502: error.message = '网关错误'; break;
       case 503: error.message = '服务不可用'; break;
       case 504: error.message = '网关超时'; break;
       case 505: error.message = 'HTTP版本不受支持'; break;
       default: break;
       /* eslint-disabled */
     }
     return Promise.reject(error);
    };
    
    // request interceptor
    request.interceptors.request.use((config) => {
     // 如果 token 存在
     // 让每个请求携带自定义 token 请根据实际情况自行修改
     // eslint-disable-next-line no-param-reassign
     config.headers.Authorization = `bearer ${storage.get('ACCESS_TOKEN')}`;
     return config;
    }, errorHandler);
    
    // response interceptor
    request.interceptors.response.use((response) => {
     const dataAxios = response.data;
     // 这个状态码是和后端约定的
     const { code } = dataAxios;
     // 根据 code 进行判断
     if (code === undefined) {
       // 如果没有 code 代表这不是项目后端开发的接口
       return dataAxios;
     // eslint-disable-next-line no-else-return
     } else {
       // 有 code 代表这是一个后端接口 可以进行进一步的判断
       switch (code) {
         case 200:
           // [ 示例 ] code === 200 代表没有错误
           return dataAxios.data;
         case 'xxx':
           // [ 示例 ] 其它和后台约定的 code
           return 'xxx';
         default:
           // 不是正确的 code
           return '不是正确的code';
       }
     }
    }, errorHandler);
    
    export default request;
    
    

    相关文章

      网友评论

          本文标题:axios interceptors error 处理

          本文链接:https://www.haomeiwen.com/subject/xnxdnktx.html