| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { ErrorShowType } from '@/defines';
- import { message, notification } from '@/utils/antdAppInstance';
- import { toLoginPage } from '@/utils/routerUtils';
- import type { RequestConfig } from '@umijs/max';
- import axios from 'axios';
- /**
- * @name 错误处理
- * pro 自带的错误处理, 可以在这里做自己的改动
- * @doc https://umijs.org/docs/max/request#配置
- */
- export const errorConfig: RequestConfig = {
- // 错误处理: umi@3 的错误处理方案。
- errorConfig: {
- // 错误抛出
- errorThrower: (res) => {
- const { success, data, errorCode, errorMessage, showType } = res as unknown as API.Result;
- if (!success) {
- const error: any = new Error(errorMessage);
- error.name = 'BizError';
- error.info = { errorCode, errorMessage, showType, data };
- console.error('errorThrower error:', error);
- throw error; // 抛出自制的错误
- }
- },
- // 错误接收及处理
- errorHandler: (error: any, opts: any) => {
- if (opts?.skipErrorHandler) throw error;
- if (axios.isCancel(error)) {
- console.warn('请求已被取消', error, opts);
- error.isCanceled = true;
- return;
- }
- // errorThrower 抛出的错误。
- if (error.name === 'BizError') {
- const errorInfo: API.Result | undefined = error.info;
- if (errorInfo) {
- const { errorMessage, errorCode } = errorInfo;
- if (errorCode === 401) {
- toLoginPage();
- return;
- }
- switch (errorInfo.showType) {
- case ErrorShowType.SILENT:
- // do nothing
- break;
- case ErrorShowType.WARN_MESSAGE:
- message.warning(errorMessage);
- break;
- case ErrorShowType.ERROR_MESSAGE:
- message.error(errorMessage);
- break;
- case ErrorShowType.NOTIFICATION:
- notification.error({
- description: errorMessage,
- message: errorCode,
- });
- break;
- case ErrorShowType.REDIRECT:
- // TODO: redirect
- break;
- default:
- message.error(errorMessage);
- }
- }
- } else if (error.response) {
- // Axios 的错误
- // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
- //message.error(`Response status:${error.response.status}`);
- if (error.response.status === 401) {
- toLoginPage();
- return;
- }
- notification.error({
- message: error.response.status,
- description: error.message,
- });
- } else if (error.request) {
- // 请求已经成功发起,但没有收到响应
- // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例,
- // 而在node.js中是 http.ClientRequest 的实例
- message.error('None response! Please retry.');
- } else {
- // 发送请求时出了点问题
- message.error('Request error, please retry.');
- }
- },
- },
- };
|