Files
iotlcm/app/src/http/tools/enum.ts
T

130 lines
4.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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,
}
}