qn-code-msg
Version:
一个用于管理错误码和错误消息映射的轻量级工具库。支持添加、获取、检查、修改和删除错误码及其对应的消息。
117 lines (111 loc) • 3.54 kB
JavaScript
import { code_msg } from "../utils/constants.js";
import axios from "axios";
import config from '../config/config.js';
const errorCodeMap = new Map(code_msg);
const codesMap = new Map();
// --------------------------------------静态错误码,从本地写死,不支持国际化----------------------------
const removeStaticCode = (code) => {
errorCodeMap.delete(code);
};
const addStaticCode = (code, msg = '') => {
errorCodeMap.set(code, msg);
};
const getStaticCode = (code) => {
return errorCodeMap.get(code);
};
const hasStaticCode = (code) => {
return errorCodeMap.has(code);
};
const getAllStaticCode = () => {
return errorCodeMap;
};
const setStaticCode = (code, msg = '') => {
errorCodeMap.set(code, msg);
};
const errorStaticCodeObject = () => {
return errorCodeMap;
};
// --------------------------------------动态错误码,从接口中获取,支持国际化------------------------
const removeDynamicCode = (code) => {
codesMap.delete(code);
};
const addDynamicCode = (code, msg = '') => {
codesMap.set(code, msg);
};
const getDynamicCode = (code) => {
return codesMap.get(code);
};
const hasDynamicCode = (code) => {
return codesMap.has(code);
};
const getAllDynamicCode = () => {
return codesMap;
};
const setDynamicCode = (code, msg = '') => {
codesMap.set(code, msg);
};
const errorDynamicCodeObject = () => {
return Object.fromEntries(codesMap);
};
/**
* 获取所有错误码
*
* @param {Object} options - 配置选项
* @param {string} [options.mode='dynamic'] - 模式选择,'static' 表示静态模式,'dynamic' 表示动态模式
* @param {boolean} [options.reload=false] - 是否强制重新加载动态错误码
* @returns {Object|null} 返回错误码对象,如果出错则返回 null
*
* 静态模式下直接返回本地写死的错误码对象。
* 动态模式下,如果 `codesMap` 已有值且 `reload` 为 false,则直接返回缓存的错误码对象。
* 如果需要重新加载错误码,则通过接口请求动态加载错误码并更新缓存。
*/const getAllcodes = async ({ mode = 'dynamic', reload = false } = {}) => {
//静态模式下直接返回错误码对象
if (mode === 'static') {
return errorStaticCodeObject();
}
//动态模式下,判断是否需要重新加载错误码,codesMap没有值或者reload为true时,重新加载错误码
if (codesMap.size !== 0 && !reload) {
return codesMap;
}
//动态模式加载错误码
try {
const response = await axios.post(config.address, {}, {
headers: {
'Content-Type': 'application/json'
}
});
const { errorCode, errorMsg, result } = response;
//接口校验
if (errorCode !== 0) {
console.error('动态接口报错了:请检查接口路径!', errorMsg);
return null;
}
//接口返回数据处理
if (result.codes) {
Object.entries(result.codes).forEach(([key, value]) => {
codesMap.set(key, value);
});
}
return codesMap;
} catch (error) {
console.error('代码块错误,请修复!', error?.message || error);
return null;
}
};
export {
removeStaticCode,
addStaticCode,
getStaticCode,
hasStaticCode,
getAllStaticCode,
setStaticCode,
errorStaticCodeObject,
removeDynamicCode,
addDynamicCode,
getDynamicCode,
hasDynamicCode,
getAllDynamicCode,
setDynamicCode,
errorDynamicCodeObject,
getAllcodes
};