| | |
| | | import { ElLoading as Loading, ElNotification } from 'element-plus'; |
| | | import { router } from '@/router'; |
| | | import { Message, tokenIsExpired } from '@/utils'; |
| | | import { httpLoggerRecord } from '../LoggerRecord'; |
| | | |
| | | // 加载环境变量 VITE_PROXY_DOMAIN(开发环境) VITE_PROXY_DOMAIN_REAL(打包后的线上环境) |
| | | const { VITE_PROXY_DOMAIN, VITE_PROXY_DOMAIN_REAL, DEV } = loadEnv(); |
| | |
| | | */ |
| | | msg?: string; |
| | | showType?: ErrorShowType; |
| | | traceId?: string; |
| | | } |
| | | |
| | | interface ErrorResponse { |
| | |
| | | // 错误接收及处理 |
| | | errorHandler: (error, opts) => { |
| | | console.log('error: ', error); |
| | | |
| | | const url = opts.url ?? ''; |
| | | httpLoggerRecord.error({ |
| | | message: `[${url}] 请求错误`, |
| | | httpParams: { |
| | | url: url, |
| | | //@ts-ignore |
| | | traceId: error?.info?.traceId, |
| | | stackTrace: error.stack, |
| | | }, |
| | | args: [{ data: opts.data, params: opts.params, headers: opts.headers }], |
| | | }); |
| | | |
| | | if (opts?.skipErrorHandler) throw error; |
| | | |
| | | if (opts?.customErrorHandler) { |
| | |
| | | const errorInfo: ErrorInfo | undefined = (error as any).info; |
| | | if (errorInfo) { |
| | | const { errorMessage, errorCode } = errorInfo; |
| | | if (Number(errorCode) === 401) { |
| | | handleLogout(); |
| | | } |
| | | switch (errorInfo.showType) { |
| | | case ErrorShowType.SILENT: |
| | | // do nothing |
| | |
| | | } else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) { |
| | | // Axios 的错误 |
| | | // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围 |
| | | handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>); |
| | | handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>); |
| | | // Message.errorMessage(`Response status:${(error as AxiosError).response.status}`); |
| | | } else if ((error as AxiosError).request) { |
| | | // 请求已经成功发起,但没有收到响应 |
| | |
| | | if (config.needNProcess) { |
| | | NProgress.start(); |
| | | } |
| | | |
| | | httpLoggerRecord.info({ |
| | | message: `[${$config.url}] 请求开始`, |
| | | httpParams: { |
| | | url: $config.url, |
| | | }, |
| | | args: [{ data: $config.data, params: $config.params, headers: $config.headers }], |
| | | }); |
| | | |
| | | const userStore = useUserStoreHook(); |
| | | |
| | |
| | | [ |
| | | (response) => { |
| | | const $config = response.config as IRequestOptions; |
| | | |
| | | httpLoggerRecord.info({ |
| | | message: `[${$config.url}] 请求结束`, |
| | | httpParams: { |
| | | url: $config.url, |
| | | traceId: response.data?.traceId, |
| | | }, |
| | | args: [{ data: $config.data, params: $config.params, headers: $config.headers }], |
| | | }); |
| | | |
| | | const { needNProcess, getResponse = false } = $config; |
| | | |
| | |
| | | [505]: 'HTTP版本不受支持', |
| | | }; |
| | | |
| | | function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) { |
| | | function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) { |
| | | if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) { |
| | | handleLogout(); |
| | | return; |
| | | } |
| | | if (error && error.response) { |
| | | let message = ErrorMessageMap[error.response?.status] ?? '请求错误'; |
| | | if (error.response.data?.error?.message) { |
| | | message = error.response.data?.error?.message; |
| | | if (error.response.data?.msg) { |
| | | message = error.response.data?.msg; |
| | | } |
| | | |
| | | if (error.response?.status === 401) { |
| | | if (error.response?.status === 401 || error.response.data.code === 401) { |
| | | handleLogout(); |
| | | } |
| | | Message.errorMessage(message); |