2021-05-29 03:02:15 +08:00
|
|
|
import { ElMessage } from 'element-plus';
|
|
|
|
|
|
|
|
const ERROR_STATUS = {
|
|
|
|
400: '400: 请求出现语法错误',
|
|
|
|
401: '401: 用户未授权~',
|
|
|
|
403: '403: 服务器拒绝访问~',
|
|
|
|
404: '404: 请求的资源不存在~',
|
|
|
|
405: '405: 请求方法未允许~',
|
|
|
|
408: '408: 网络请求超时~',
|
|
|
|
500: '500: 服务器内部错误~',
|
|
|
|
501: '501: 服务器未实现请求功能~',
|
|
|
|
502: '502: 错误网关~',
|
|
|
|
503: '503: 服务不可用~',
|
|
|
|
504: '504: 网关超时~',
|
|
|
|
505: '505: http版本不支持该请求~'
|
|
|
|
};
|
2021-08-13 14:22:35 +08:00
|
|
|
type ErrorStatus = keyof typeof ERROR_STATUS;
|
2021-05-29 03:02:15 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 网络请求错误状态处理
|
|
|
|
* @param error - 错误
|
|
|
|
*/
|
2021-07-20 10:07:35 +08:00
|
|
|
export function errorHandler(error: any): void {
|
2021-05-29 03:02:15 +08:00
|
|
|
if (error.response) {
|
|
|
|
const status = error.response.status as ErrorStatus;
|
|
|
|
ElMessage.error(ERROR_STATUS[status]);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
|
|
|
|
ElMessage.error('网络连接超时~');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!window.navigator.onLine || error.message === 'Network Error') {
|
|
|
|
ElMessage.error('网络不可用~');
|
|
|
|
return;
|
|
|
|
}
|
2021-08-13 14:22:35 +08:00
|
|
|
ElMessage.error('请求错误~');
|
2021-05-29 03:02:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 连续的请求错误依此显示
|
|
|
|
* @param duration - 上一次弹出错误消息到下一次的时间(ms)
|
|
|
|
*/
|
|
|
|
export function continuousErrorHandler(duration: number) {
|
|
|
|
let errorStacks: string[] = [];
|
|
|
|
function pushError(id: string) {
|
|
|
|
errorStacks.push(id);
|
|
|
|
}
|
|
|
|
function removeError(id: string) {
|
|
|
|
errorStacks = errorStacks.filter(item => item !== id);
|
|
|
|
}
|
|
|
|
function handleError(id: string, callback: Function) {
|
|
|
|
callback();
|
|
|
|
setTimeout(() => {
|
|
|
|
removeError(id);
|
|
|
|
}, duration);
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleContinuousError(callback: Function) {
|
|
|
|
const id = Date.now().toString(36);
|
|
|
|
const { length } = errorStacks;
|
|
|
|
if (length > 0) {
|
|
|
|
pushError(id);
|
|
|
|
setTimeout(() => {
|
|
|
|
handleError(id, callback);
|
|
|
|
}, duration * length);
|
|
|
|
} else {
|
|
|
|
pushError(id);
|
|
|
|
handleError(id, callback);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return handleContinuousError;
|
|
|
|
}
|