createError.ts
2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { AxiosError, AxiosResponse } from 'axios';
import { HttpClientResponse } from 'urllib';
export interface ErrorCode {
[key: number]: string;
}
export interface ErrorMsg extends Error {
errorCode?: number | string;
errorMsg?: string;
response?: any;
}
export const ERROR_MSG: ErrorCode = {
500: '500, 服务器异常,请稍后再试',
503: '抱歉,当前服务器异常,请稍后再试',
504: '服务器响应超时',
401: '抱歉,您还未登录',
40101: '抱歉,您还未登录',
40102: '抱歉,您还未登录',
40103: '抱歉,您还未登录',
40104: '登录已过期,您需要重新登录',
40001: '获取版本信息失败',
403: '抱歉,您没有权限访问该页面',
404: '你访问的接口不存在',
// 自定义
10001: '解析失败,_bodyInit为非正确的JSON格式字符串',
10002: '网络异常,请确保您能够正常访问网络',
10003: '该数据为app版本发布信息,数据格式与普通的返回结果不一致',
10004: '请求已经终止',
0: '当前请求异常',
};
function createError(responseError: HttpClientResponse<any>) {
let errorCode;
let errorMsg;
let response = {};
// 请求已经发送,并且服务器有返回
if (responseError.data || responseError.status) {
response = responseError.data || responseError;
let data = responseError.data;
if (data && typeof data === 'object') {
errorMsg = data.result || data.error_msg || data.message || data.description;
errorCode = data.code || data.status || responseError.status;
}
if (!errorCode) {
errorCode = responseError.status;
}
if (!errorMsg) {
errorMsg = responseError?.res?.statusMessage;
}
} else if (responseError.res.complete) {
// 请求已经发送但是没有收到服务端响应
console.log('请求已经发送但是没有收到服务端响应');
if (!errorCode) {
errorCode = responseError.status;
errorMsg = responseError?.res?.statusMessage;
}
} else {
// 请求未发送
errorMsg = '请求未发送成功';
}
if (!errorCode) {
errorCode = -1;
}
const error: ErrorMsg = new Error(errorMsg);
error.errorCode = errorCode;
error.errorMsg = errorMsg || ERROR_MSG[errorCode];
error.response = response;
throw error;
}
export function createErrorByError(error: AxiosError): ICommon.ServerResponse<any> {
const defaultRes: ICommon.ServerResponse<any> = {
code: Number(error.code) || -1,
result: '网络异常,请稍后再试',
data: undefined,
success: false,
};
if (error.response) {
defaultRes.code = error?.code || error.response?.data?.status;
defaultRes.result = error.response?.data?.message || error?.message;
defaultRes.data = error?.response?.data;
return defaultRes;
}
return defaultRes;
}
export default createError;