130 lines
4.0 KiB
TypeScript
130 lines
4.0 KiB
TypeScript
export enum ResultEnum {
|
||
// 0和200当做成功都很普遍,这里直接兼容两者(PS:0和200通常都不会当做错误码,但是有的接口会返回0,有的接口会返回200)
|
||
Success0 = 0, // 成功
|
||
Success200 = 200, // 成功
|
||
Error = 400, // 错误
|
||
Unauthorized = 401, // 未授权
|
||
Forbidden = 403, // 禁止访问(原为forbidden)
|
||
NotFound = 404, // 未找到(原为notFound)
|
||
MethodNotAllowed = 405, // 方法不允许(原为methodNotAllowed)
|
||
RequestTimeout = 408, // 请求超时(原为requestTimeout)
|
||
InternalServerError = 500, // 服务器错误(原为internalServerError)
|
||
NotImplemented = 501, // 未实现(原为notImplemented)
|
||
BadGateway = 502, // 网关错误(原为badGateway)
|
||
ServiceUnavailable = 503, // 服务不可用(原为serviceUnavailable)
|
||
GatewayTimeout = 504, // 网关超时(原为gatewayTimeout)
|
||
HttpVersionNotSupported = 505, // HTTP版本不支持(原为httpVersionNotSupported)
|
||
}
|
||
export enum ContentTypeEnum {
|
||
JSON = 'application/json;charset=UTF-8',
|
||
FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8',
|
||
FORM_DATA = 'multipart/form-data;charset=UTF-8',
|
||
}
|
||
|
||
export const NETWORK_ERROR_MESSAGE = '网络异常,请检查网络后重试'
|
||
export const REQUEST_ERROR_MESSAGE = '请求处理失败,请稍后重试'
|
||
|
||
const networkErrorPattern
|
||
= /request:fail|timeout|failed to fetch|networkerror|err_connection|econnrefused|econnreset|econnaborted|enotfound|net::|socket|connect|refused|abort|not in domain list|url not in domain list|ssl|tls|certificate|网络|超时/i
|
||
|
||
const technicalDetailPattern
|
||
= /https?:\/\/|\/api\/|接口[::]|errMsg|statusCode|request:|XMLHttpRequest|TypeError:|Error:/i
|
||
|
||
/**
|
||
* 根据状态码,生成对应的错误信息
|
||
* @param {number|string} status 状态码
|
||
* @returns {string} 错误信息
|
||
*/
|
||
export function ShowMessage(status: number | string): string {
|
||
let message: string
|
||
switch (status) {
|
||
case 400:
|
||
message = '请求错误(400)'
|
||
break
|
||
case 401:
|
||
message = '未授权,请重新登录(401)'
|
||
break
|
||
case 403:
|
||
message = '拒绝访问(403)'
|
||
break
|
||
case 404:
|
||
message = '请求出错(404)'
|
||
break
|
||
case 408:
|
||
message = '请求超时(408)'
|
||
break
|
||
case 500:
|
||
message = '服务器错误(500)'
|
||
break
|
||
case 501:
|
||
message = '服务未实现(501)'
|
||
break
|
||
case 502:
|
||
message = '网络错误(502)'
|
||
break
|
||
case 503:
|
||
message = '服务不可用(503)'
|
||
break
|
||
case 504:
|
||
message = '网络超时(504)'
|
||
break
|
||
case 505:
|
||
message = 'HTTP版本不受支持(505)'
|
||
break
|
||
default:
|
||
message = `连接出错(${status})!`
|
||
}
|
||
return `${message},请检查网络或联系管理员!`
|
||
}
|
||
|
||
export function normalizeErrorText(value: unknown, fallback = REQUEST_ERROR_MESSAGE) {
|
||
if (typeof value !== 'string') {
|
||
return fallback
|
||
}
|
||
const message = value.trim().replace(/^Error:\s*/i, '')
|
||
if (!message) {
|
||
return fallback
|
||
}
|
||
if (/^\d+$/.test(message)) {
|
||
return ShowMessage(Number(message))
|
||
}
|
||
if (networkErrorPattern.test(message)) {
|
||
return NETWORK_ERROR_MESSAGE
|
||
}
|
||
if (technicalDetailPattern.test(message)) {
|
||
return fallback
|
||
}
|
||
return message
|
||
}
|
||
|
||
export function getHttpErrorMessage(data: any, fallback = REQUEST_ERROR_MESSAGE, statusCode?: number) {
|
||
if (data instanceof Error) {
|
||
return normalizeErrorText(data.message, fallback)
|
||
}
|
||
|
||
const directMessage = data?.msg || data?.message || data?.data?.msg || data?.data?.message
|
||
if (directMessage) {
|
||
return normalizeErrorText(directMessage, fallback)
|
||
}
|
||
|
||
const rawErrMsg = data?.errMsg
|
||
if (rawErrMsg) {
|
||
return normalizeErrorText(rawErrMsg, fallback)
|
||
}
|
||
|
||
const code = Number(data?.code || statusCode || data?.statusCode)
|
||
if (Number.isFinite(code) && code >= 400) {
|
||
return ShowMessage(code)
|
||
}
|
||
return fallback
|
||
}
|
||
|
||
export function toUserRequestError(error: unknown, message: string) {
|
||
return {
|
||
rawError: error,
|
||
msg: message,
|
||
message,
|
||
errMsg: message,
|
||
}
|
||
}
|