UNPKG

qn-code-msg

Version:

一个用于管理错误码和错误消息映射的轻量级工具库。支持添加、获取、检查、修改和删除错误码及其对应的消息。

117 lines (111 loc) 3.54 kB
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 };