UMI 自定义错误处理方案[避免errorHandler无法拦截问题]

UMI 自定义错误处理方案[避免errorHandler无法拦截问题]

注意:如果不是硬性要求success,就没必要使用umi内置的那套 errorHandler。


export default {
  baseURL: (REACT_APP_ENV === 'prod' && PROD_BASE_API_URL_API_URL) || '',
  timeout: 30000,
  // `validateStatus` defines whether to resolve or reject the promise for a given
  // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
  // or `undefined`), the promise will be resolved; otherwise, the promise will be
  // rejected.
  validateStatus: function (status: number) {
    // return true;
    return status >= 200 && status < 300; // default
  },
  requestInterceptors: [],
  responseInterceptors: [
    [
      (response: AxiosResponse) => {
        return response;
      },
      (error: AxiosError) => {
        /**
         * 说明: 对接服务端API
         * API方案:
         * 1、错误定义对接服务端的API,规定业务错误响应状态码400,登录的401
         * 2、其他状态码包括:500、404等一律按照非业务正常响应
         *
         * 服务端响应:
         * 1、服务端响应体的内容统一为:{data,code,message},code同步为状态码
         * 2、预定 PostBlogApi 为提交日志的接口
         *
         * umi request 处理
         * 1、响应状态码正确时时(<300 && >=200),返回 Promise.resolve(response),
         * 会执行 PostBlogApi.then(res),res为 response.data
         *
         * 2、响应状态为错误时(>=200 && <300),返回 Promise.reject(response?.data),
         * 会执行 PostBlogApi.catch(res),res为 response.data,所以可以把业务错误放在data
         * 里面,供业务逻辑消遣
         *
         * 建议:既然约定了400为业务错误返回,那应该确保服务端返回的业务错误必须为400,不要搞特殊返回
         */

        console.log('响应错误: ', error);
        const { response } = error;

        if (response) {
          const data: any = response?.data;
          if (response.status === 400) {
            return Promise.reject(error);
          } else if (response.status === 401) {
            history.push(LOGIN_PATH);
          } else if (response?.data && typeof response.data === 'string') {
            message.error(response.data);
          } else if (data?.message) {
            message.error(data.message);
          } else {
            message.error(response.statusText);
          }
          return Promise.reject(error);
        } else {
          message.error('响应失败');
          console.log('error not found response: ');
          return Promise.reject(error);
        }
      },
    ],
  ],
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值