# 通用工具 API **本文档引用的文件** - [README.md](file://README.md) - [package.json](file://package.json) - [index.js](file://index.js) - [TsCommon.js](file://src/utils/TsCommon.js) - [TsCrypto.js](file://src/utils/TsCrypto.js) - [TsSM4.js](file://src/utils/TsSM4.js) - [TsStorage.js](file://src/utils/TsStorage.js) - [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js) - [TsHttpUtil.js](file://src/https/TsHttpUtil.js) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) ## 简介 这是一个功能丰富的 JavaScript 工具包,提供了多种实用的工具函数和组件,主要用于 Web 应用开发中的常见需求。该工具包包含了字符串处理、数据类型检查、URL 操作、加密解密、存储管理、HTTP 请求等功能模块。 主要特性: - **字符串处理工具**:URL 参数解析、空值判断、JSON 解析、字符串替换、结尾判断等 - **加密解密功能**:基于 SM4 算法的加密解密工具 - **存储管理**:本地存储封装,支持对象序列化 - **HTTP 请求工具**:基于 umi-request 的网络请求封装 - **全局配置管理**:统一的配置管理和环境检测 ## 项目结构 该项目采用模块化的组织方式,主要分为以下目录结构: ```mermaid graph TB subgraph "项目根目录" Root[index.js
主入口文件] Package[package.json
项目配置] Readme[README.md
使用说明] end subgraph "src/ 工具源码目录" Utils[src/utils/
通用工具模块] Https[src/https/
HTTP 工具模块] end subgraph "Utils 模块" Common[TsCommon.js
通用工具] Crypto[TsCrypto.js
加密工具] SM4[TsSM4.js
SM4 算法实现] Storage[TsStorage.js
存储工具] Config[TsGlobalConfig.js
全局配置] end subgraph "Https 模块" HttpUtil[TsHttpUtil.js
HTTP 请求工具] end Root --> Utils Root --> Https Utils --> Common Utils --> Crypto Utils --> SM4 Utils --> Storage Utils --> Config Https --> HttpUtil ``` **图表来源** - [index.js:1-16](file://index.js#L1-L16) - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) - [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456) - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) - [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34) - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) **章节来源** - [index.js:1-16](file://index.js#L1-L16) - [package.json:1-24](file://package.json#L1-L24) ## 核心组件 该工具包的核心由六个主要模块组成,每个模块都提供特定的功能领域: ### 主要模块概览 | 模块名称 | 文件路径 | 功能描述 | |---------|----------|----------| | TsCommon | src/utils/TsCommon.js | 通用工具函数集合 | | TsCrypto | src/utils/TsCrypto.js | 加密解密工具 | | TsSM4 | src/utils/TsSM4.js | SM4 算法实现 | | TsStorage | src/utils/TsStorage.js | 本地存储管理 | | TsGlobalConfig | src/utils/TsGlobalConfig.js | 全局配置管理 | | TsHttpUtil | src/https/TsHttpUtil.js | HTTP 请求封装 | ### 模块依赖关系 ```mermaid graph LR subgraph "外部依赖" Umi[umi-request
网络请求库] Base64[base64-js
Base64 编解码] end subgraph "内部模块" Common[TsCommon] Crypto[TsCrypto] SM4[TsSM4] Storage[TsStorage] Config[TsGlobalConfig] HttpUtil[TsHttpUtil] end HttpUtil --> Storage HttpUtil --> Common HttpUtil --> Crypto HttpUtil --> Config Crypto --> SM4 Crypto --> Config Storage --> Common SM4 --> Base64 HttpUtil --> Umi ``` **图表来源** - [package.json:19-22](file://package.json#L19-L22) - [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5) - [TsCrypto.js:1-3](file://src/utils/TsCrypto.js#L1-L3) **章节来源** - [package.json:19-22](file://package.json#L19-L22) - [index.js:8-15](file://index.js#L8-L15) ## 架构概览 该工具包采用了分层架构设计,将不同功能领域的工具函数分离到独立的模块中,通过清晰的依赖关系实现松耦合的设计。 ### 整体架构图 ```mermaid graph TB subgraph "应用层" App[业务应用] end subgraph "工具层" HttpLayer[HTTP 层
TsHttpUtil] CryptoLayer[加密层
TsCrypto + TsSM4] StorageLayer[存储层
TsStorage] CommonLayer[通用层
TsCommon] end subgraph "基础设施层" Network[umi-request] CryptoLib[SM4 算法] StorageAPI[localStorage] Encoding[base64-js] end App --> HttpLayer HttpLayer --> CryptoLayer HttpLayer --> StorageLayer HttpLayer --> CommonLayer CryptoLayer --> CryptoLib CryptoLayer --> Encoding StorageLayer --> StorageAPI HttpLayer --> Network ``` **图表来源** - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) ### 数据流处理流程 ```mermaid sequenceDiagram participant Client as 应用客户端 participant HttpUtil as HTTP 工具 participant Crypto as 加密模块 participant Storage as 存储模块 participant Server as 服务器 Client->>HttpUtil : 发送请求 HttpUtil->>Storage : 获取用户令牌 Storage-->>HttpUtil : 返回令牌 HttpUtil->>HttpUtil : 处理请求参数 HttpUtil->>Crypto : 加密数据(可选) Crypto-->>HttpUtil : 返回加密结果 HttpUtil->>Server : 发送 HTTP 请求 Server-->>HttpUtil : 返回响应 HttpUtil->>Crypto : 解密响应(可选) Crypto-->>HttpUtil : 返回解密结果 HttpUtil-->>Client : 返回处理后的数据 ``` **图表来源** - [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134) - [TsCrypto.js:19-30](file://src/utils/TsCrypto.js#L19-L30) - [TsStorage.js:13-15](file://src/utils/TsStorage.js#L13-L15) ## 详细组件分析 ### TsCommon 通用工具模块 TsCommon 模块提供了基础的工具函数,涵盖了字符串处理、数据类型检查、URL 操作等多个方面。 #### 核心 API 接口 ##### getParamFormUrl - URL 参数解析 **方法签名**: `getParamFormUrl(key, host)` **参数说明**: - `key`: string - 要获取的 URL 参数键名 - `host`: string (可选) - 目标 URL 字符串,默认使用当前页面 URL **返回值**: string - 匹配参数的值,未找到时返回空字符串 **使用场景**: - 从 URL 中提取查询参数 - 处理页面分享链接中的参数 - 解析路由参数 **参数验证规则**: - 支持任意字符串作为参数键 - host 参数可选,不传入时使用当前页面 URL **边界条件处理**: - URL 中无问号或无查询参数时返回空字符串 - 参数值包含特殊字符时自动解码 - URL 格式不正确时捕获异常并返回空字符串 ##### isEmpty - 空值判断 **方法签名**: `isEmpty(value)` **参数说明**: - `value`: any - 要检查的值 **返回值**: boolean - 值为 undefined、null 或空字符串时返回 true **使用场景**: - 表单验证 - 数据预处理 - 条件判断 **参数验证规则**: - 接受任意类型的参数 - 严格比较空值类型 ##### parseJSON - JSON 解析 **方法签名**: `parseJSON(value, def)` **参数说明**: - `value`: string - 要解析的 JSON 字符串 - `def`: any (可选) - 默认返回值,默认为空对象 {} **返回值**: any - 解析后的对象或默认值 **使用场景**: - 安全地解析 JSON 字符串 - 处理可能损坏的 JSON 数据 - 提供默认值机制 **参数验证规则**: - 第二个参数为可选,默认值为空对象 - 解析失败时返回默认值 **边界条件处理**: - JSON 格式错误时捕获异常 - 解析结果为空时使用默认值 ##### split - 字符串分割 **方法签名**: `split(obj, seq)` **参数说明**: - `obj`: string - 要分割的字符串 - `seq`: string (可选) - 分隔符,默认为逗号 **返回值**: string[] - 分割后的字符串数组 **使用场景**: - 处理逗号分隔的列表 - 解析配置字符串 - 数据格式转换 **参数验证规则**: - 支持任意字符串作为输入 - 分隔符可自定义 **边界条件处理**: - 输入为 falsy 值时返回空数组 - 空字符串返回包含空字符串的数组 ##### isDevelopment - 环境检测 **方法签名**: `isDevelopment()` **参数说明**: 无 **返回值**: boolean - 当前环境为 development 时返回 true **使用场景**: - 开发模式下的调试输出 - 环境相关的功能开关 - 测试环境配置 **参数验证规则**: - 依赖 Node.js 的环境变量 ##### replaceAll - 全部替换 **方法签名**: `replaceAll(string, s1, s2)` **参数说明**: - `string`: string - 原始字符串 - `s1`: string - 要替换的子字符串 - `s2`: string - 替换后的字符串 **返回值**: string - 替换后的字符串 **使用场景**: - 批量字符串替换 - 文本格式化 - 数据清洗 **参数验证规则**: - 支持正则表达式的特殊字符 - 使用全局标志进行完全替换 ##### endWith - 结尾判断 **方法签名**: `endWith(string, endStr)` **参数说明**: - `string`: string - 要检查的字符串 - `endStr`: string - 结尾字符串 **返回值**: boolean - 字符串以指定结尾时返回 true **使用场景**: - 文件扩展名检查 - URL 路径处理 - 字符串格式验证 **参数验证规则**: - 支持空字符串作为输入 - 不区分大小写 **章节来源** - [TsCommon.js:4-18](file://src/utils/TsCommon.js#L4-L18) - [TsCommon.js:25-27](file://src/utils/TsCommon.js#L25-L27) - [TsCommon.js:34-44](file://src/utils/TsCommon.js#L34-L44) - [TsCommon.js:51-56](file://src/utils/TsCommon.js#L51-L56) - [TsCommon.js:63-65](file://src/utils/TsCommon.js#L63-L65) - [TsCommon.js:74-76](file://src/utils/TsCommon.js#L74-L76) - [TsCommon.js:84-87](file://src/utils/TsCommon.js#L84-L87) ### TsCrypto 加密工具模块 TsCrypto 模块提供了基于 SM4 算法的加密解密功能,封装了底层的加密细节。 #### 核心 API 接口 ##### 构造函数 **方法签名**: `new TsCrypto()` **参数说明**: 无 **初始化过程**: - 从全局配置获取 Base64 密钥 - 创建 SM4 实例(ECB 模式) - 设置密文类型为 Base64 ##### encrypt - 数据加密 **方法签名**: `encrypt(content)` **参数说明**: - `content`: string | any - 要加密的内容 **返回值**: string - 加密后的 Base64 字符串 **使用场景**: - 敏感数据传输加密 - API 请求体加密 - 数据安全存储 **参数验证规则**: - 自动将非字符串内容转换为 JSON 字符串 - 依赖 SM4 算法进行加密 ##### decrypt - 数据解密 **方法签名**: `decrypt(base64)` **参数说明**: - `base64`: string - Base64 编码的密文 **返回值**: string - 解密后的原始内容 **使用场景**: - 解密服务器返回的加密数据 - 数据恢复和验证 - 安全通信 **参数验证规则**: - 接收 Base64 编码的密文 - 返回原始明文内容 **章节来源** - [TsCrypto.js:5-34](file://src/utils/TsCrypto.js#L5-L34) ### TsSM4 SM4 算法实现 TsSM4 是一个完整的 SM4 对称加密算法实现,支持 ECB 和 CBC 两种工作模式。 #### 核心 API 接口 ##### 构造函数 **方法签名**: `new TsSM4(config)` **参数说明**: - `config`: object - 配置对象 - `keyBuffer`: Uint8Array - 16 字节密钥缓冲区 - `mode`: string - 加密模式,'cbc' 或 'ecb',默认 'cbc' - `outType`: string - 输出类型,'base64' 或 'text',默认 'base64' **参数验证规则**: - 密钥长度必须为 16 字节 - IV(初始化向量)长度必须为 16 字节(CBC 模式) - 支持的模式:'cbc'、'ecb' - 支持的输出类型:'base64'、'text' ##### encrypt - 数据加密 **方法签名**: `encrypt(plaintext)` **参数说明**: - `plaintext`: string - 要加密的明文 **返回值**: string - 加密后的密文 **使用场景**: - 数据加密传输 - 密钥生成和管理 - 安全通信协议 **参数验证规则**: - 自动进行 PKCS#7 填充 - 支持 UTF-8 编码 - 根据模式选择加密算法 ##### decrypt - 数据解密 **方法签名**: `decrypt(ciphertext)` **参数说明**: - `ciphertext`: string - 要解密的密文 **返回值**: string - 解密后的明文 **使用场景**: - 数据解密和验证 - 安全通信解码 - 数据恢复 **参数验证规则**: - 支持 Base64 和文本两种输入格式 - 自动移除 PKCS#7 填充 - 支持 UTF-8 编码 #### SM4 算法流程图 ```mermaid flowchart TD Start([开始加密]) --> Prepare["准备明文字节流
UTF-8 编码"] Prepare --> Padding["PKCS#7 填充
16 字节对齐"] Padding --> Mode{"选择模式"} Mode --> |CBC| CBCInit["CBC 模式初始化
IV = 16 字节"] Mode --> |ECB| ECBInit["ECB 模式初始化
无 IV"] CBCInit --> BlockLoop["按块处理
16 字节/块"] ECBInit --> BlockLoop BlockLoop --> XOR["与前一块密文异或
(CBC)"] XOR --> Round["32 轮加密循环"] Round --> Output["输出密文字节流"] Output --> Type{"输出类型"} Type --> |Base64| Base64["Base64 编码"] Type --> |Text| Text["UTF-8 解码"] Base64 --> End([结束]) Text --> End ``` **图表来源** - [TsSM4.js:338-387](file://src/utils/TsSM4.js#L338-L387) - [TsSM4.js:395-452](file://src/utils/TsSM4.js#L395-L452) **章节来源** - [TsSM4.js:96-156](file://src/utils/TsSM4.js#L96-L156) - [TsSM4.js:338-387](file://src/utils/TsSM4.js#L338-L387) - [TsSM4.js:395-452](file://src/utils/TsSM4.js#L395-L452) ### TsStorage 存储工具模块 TsStorage 模块提供了本地存储的封装,支持对象的序列化和反序列化。 #### 核心 API 接口 ##### save - 保存数据 **方法签名**: `save(key, value)` **参数说明**: - `key`: string - 存储键名 - `value`: any - 要保存的值 **返回值**: void **使用场景**: - 用户偏好设置保存 - 临时数据缓存 - 应用状态持久化 **参数验证规则**: - 键名必须为字符串 - 值会被 JSON 序列化 ##### get - 获取数据 **方法签名**: `get(key, def)` **参数说明**: - `key`: string - 存储键名 - `def`: any (可选) - 默认返回值,默认为空字符串 **返回值**: any - 存储的值或默认值 **使用场景**: - 用户数据读取 - 应用状态恢复 - 配置信息获取 **参数验证规则**: - 键名必须为字符串 - 支持默认值机制 ##### saveUserToken - 保存用户令牌 **方法签名**: `saveUserToken(token)` **参数说明**: - `token`: string - 用户令牌 **返回值**: void **使用场景**: - 用户登录状态管理 - 认证信息存储 - 会话管理 ##### getUserToken - 获取用户令牌 **方法签名**: `getUserToken()` **参数说明**: 无 **返回值**: string - 用户令牌或空字符串 **使用场景**: - 请求头认证 - 用户状态检查 - 权限验证 ##### saveEncryptBody - 设置加密开关 **方法签名**: `saveEncryptBody(bool)` **参数说明**: - `bool`: boolean - 加密开关,默认 true **返回值**: void **使用场景**: - 加密功能配置 - 安全策略设置 - 性能权衡 ##### getEncryptBody - 获取加密开关 **方法签名**: `getEncryptBody()` **参数说明**: 无 **返回值**: boolean - 加密开关状态 **使用场景**: - 加密功能状态检查 - 请求前状态确认 - 安全策略验证 **章节来源** - [TsStorage.js:31-43](file://src/utils/TsStorage.js#L31-L43) - [TsStorage.js:9-23](file://src/utils/TsStorage.js#L9-L23) ### TsGlobalConfig 全局配置模块 TsGlobalConfig 模块提供了统一的配置管理功能,支持运行时配置更新。 #### 核心 API 接口 ##### getConfig - 获取配置 **方法签名**: `getConfig()` **参数说明**: 无 **返回值**: object - 当前配置对象 **配置项说明**: - `base64Key`: string - Base64 编码的密钥,默认值为 "WmdUzPJXbngVNiaSsQrihg==" - `prefix`: string | function - API 前缀,可以是字符串或函数 - `onHttpError`: function - HTTP 错误回调函数 - `httpParams`: function - HTTP 参数处理器 ##### setConfig - 设置配置 **方法签名**: `setConfig(obj)` **参数说明**: - `obj`: object - 要合并的配置对象 **返回值**: void **使用场景**: - 应用启动时的配置初始化 - 运行时配置动态更新 - 环境相关的配置切换 **参数验证规则**: - 支持部分配置项的更新 - 使用对象合并的方式更新配置 **章节来源** - [TsGlobalConfig.js:5-29](file://src/utils/TsGlobalConfig.js#L5-L29) ### TsHttpUtil HTTP 请求工具 TsHttpUtil 模块基于 umi-request 提供了增强的 HTTP 请求功能,集成了加密解密、参数处理、错误处理等功能。 #### 核心 API 接口 ##### req - 通用请求方法 **方法签名**: `req(url, options)` **参数说明**: - `url`: string - 请求地址 - `options`: object - 请求选项 - `method`: string - HTTP 方法,默认 'GET' - `params`: object - 查询参数 - `data`: object - 请求体数据 - `headers`: object - 请求头 - `rawResponse`: boolean - 是否返回原始响应 **返回值**: Promise - 处理后的响应数据 **使用场景**: - 统一的 HTTP 请求入口 - 复杂请求的参数处理 - 响应数据的统一格式化 ##### get - GET 请求 **方法签名**: `get(url, params, options)` **参数说明**: - `url`: string - 请求地址 - `params`: object - 查询参数,默认 {} - `options`: object - 请求选项,默认 {} **返回值**: Promise - 响应数据 **使用场景**: - 数据获取请求 - 列表查询 - 资源读取 ##### post - POST 请求 **方法签名**: `post(url, data, options)` **参数说明**: - `url`: string - 请求地址 - `data`: object - 请求体数据,默认 {} - `options`: object - 请求选项,默认 {} **返回值**: Promise - 响应数据 **使用场景**: - 数据创建 - 表单提交 - 资源更新 ##### form - 表单提交 **方法签名**: `form(url, data, options)` **参数说明**: - `url`: string - 请求地址 - `data`: object - 表单数据,默认 {} - `options`: object - 请求选项,默认 {} **返回值**: Promise - 响应数据 **使用场景**: - 文件上传 - 表单数据提交 - 多部分数据传输 #### HTTP 请求处理流程 ```mermaid sequenceDiagram participant Client as 客户端 participant HttpUtil as HTTP 工具 participant Config as 配置管理 participant Storage as 存储模块 participant Crypto as 加密模块 participant Request as 网络请求 Client->>HttpUtil : 发送请求 HttpUtil->>Config : 获取配置前缀 Config-->>HttpUtil : 返回前缀 HttpUtil->>HttpUtil : 处理分页参数 HttpUtil->>HttpUtil : 处理相等条件 HttpUtil->>Config : 获取额外参数 Config-->>HttpUtil : 返回额外参数 HttpUtil->>Storage : 获取用户令牌 Storage-->>HttpUtil : 返回令牌 HttpUtil->>Crypto : 加密请求体(可选) Crypto-->>HttpUtil : 返回加密结果 HttpUtil->>Request : 发送网络请求 Request-->>HttpUtil : 返回响应 HttpUtil->>HttpUtil : 检查响应状态 HttpUtil->>Crypto : 解密响应(可选) Crypto-->>HttpUtil : 返回解密结果 HttpUtil-->>Client : 返回处理后的数据 ``` **图表来源** - [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134) - [TsHttpUtil.js:50-91](file://src/https/TsHttpUtil.js#L50-L91) **章节来源** - [TsHttpUtil.js:99-171](file://src/https/TsHttpUtil.js#L99-L171) ## 依赖分析 该工具包的依赖关系相对简单,主要依赖于两个外部库和内部模块间的协作。 ### 外部依赖 | 依赖名称 | 版本 | 用途 | |---------|------|------| | base64-js | 1.5.1 | Base64 编解码 | | umi-request | 1.4.0 | HTTP 请求封装 | ### 内部模块依赖 ```mermaid graph TD subgraph "主入口" Index[index.js] end subgraph "工具模块" Common[TsCommon] Crypto[TsCrypto] SM4[TsSM4] Storage[TsStorage] Config[TsGlobalConfig] end subgraph "HTTP 模块" HttpUtil[TsHttpUtil] end Index --> Common Index --> Crypto Index --> SM4 Index --> Storage Index --> Config Index --> HttpUtil HttpUtil --> Storage HttpUtil --> Common HttpUtil --> Crypto HttpUtil --> Config Crypto --> SM4 Crypto --> Config Storage --> Common ``` **图表来源** - [index.js:1-16](file://index.js#L1-L16) - [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5) ### 依赖关系分析 该工具包采用了清晰的模块化设计,各模块职责明确: 1. **TsCommon** 作为基础工具模块,被其他所有模块依赖 2. **TsCrypto** 依赖 **TsSM4** 和 **TsGlobalConfig** 进行加密操作 3. **TsStorage** 依赖 **TsCommon** 进行 JSON 解析 4. **TsHttpUtil** 依赖所有其他模块进行完整的 HTTP 请求处理 **章节来源** - [package.json:19-22](file://package.json#L19-L22) - [index.js:1-16](file://index.js#L1-L16) ## 性能考虑 在使用该工具包时,需要考虑以下几个方面的性能影响: ### 字符串处理性能 - **URL 参数解析**: 使用正则表达式进行匹配,对于大量参数的 URL 可能影响性能 - **字符串替换**: `replaceAll` 使用全局正则表达式,复杂字符串可能影响性能 - **JSON 解析**: 大对象的序列化和反序列化可能成为性能瓶颈 ### 加密解密性能 - **SM4 算法**: 32 轮加密循环,对于大文本加密会有明显的时间开销 - **Base64 编解码**: 大数据量的编码解码会影响性能 - **内存使用**: 加密解密过程中会产生中间缓冲区 ### 存储性能 - **localStorage 操作**: 大对象序列化会影响存储性能 - **频繁读写**: 高频的存储操作可能影响页面响应性 ### HTTP 请求优化 - **请求合并**: 合理设计 API 接口,避免不必要的请求 - **缓存策略**: 利用浏览器缓存减少重复请求 - **批量操作**: 将多个小请求合并为批量请求 ## 故障排除指南 ### 常见问题及解决方案 #### 1. 加密密钥错误 **问题症状**: 加密或解密时报错,提示密钥长度不正确 **解决方案**: - 确保密钥长度为 16 字节 - 检查 Base64 编码是否正确 - 验证密钥格式符合要求 #### 2. URL 参数解析失败 **问题症状**: `getParamFormUrl` 返回空字符串 **解决方案**: - 检查 URL 格式是否正确 - 确认参数键名拼写正确 - 验证 URL 中是否包含查询参数 #### 3. JSON 解析异常 **问题症状**: `parseJSON` 抛出异常或返回默认值 **解决方案**: - 检查 JSON 字符串格式 - 验证字符编码是否正确 - 确认字符串不是 null 或 undefined #### 4. HTTP 请求失败 **问题症状**: 网络请求返回错误状态 **解决方案**: - 检查网络连接状态 - 验证 API 地址和参数 - 查看服务器响应状态码 - 检查跨域配置 #### 5. 存储数据丢失 **问题症状**: `get` 方法返回默认值而非预期数据 **解决方案**: - 检查浏览器存储容量限制 - 验证键名是否一致 - 确认数据格式正确 - 检查浏览器隐私模式设置 ### 调试技巧 1. **启用开发模式**: 使用 `isDevelopment()` 检测当前环境 2. **日志输出**: 在关键位置添加调试信息 3. **错误捕获**: 使用 try-catch 包装敏感操作 4. **单元测试**: 为关键函数编写测试用例 **章节来源** - [TsSM4.js:103-122](file://src/utils/TsSM4.js#L103-L122) - [TsCommon.js:34-44](file://src/utils/TsCommon.js#L34-L44) - [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35) ## 结论 该通用工具包提供了完整的 JavaScript 工具函数集合,具有以下特点: ### 优势 1. **模块化设计**: 清晰的功能划分,便于维护和扩展 2. **安全性**: 内置加密解密功能,支持敏感数据保护 3. **易用性**: 简洁的 API 设计,易于集成到现有项目 4. **完整性**: 覆盖了 Web 开发中的常见需求 ### 使用建议 1. **合理选择加密模式**: 根据安全需求选择合适的加密算法和模式 2. **注意性能影响**: 大数据量处理时要考虑性能开销 3. **错误处理**: 建立完善的错误处理机制 4. **版本兼容**: 关注依赖库的版本更新和兼容性 ### 扩展方向 1. **更多加密算法**: 可以添加 AES、RSA 等其他加密算法 2. **缓存机制**: 实现更高效的缓存策略 3. **监控功能**: 添加性能监控和错误追踪 4. **国际化支持**: 支持多语言错误消息 该工具包为 JavaScript 开发提供了坚实的基础工具集,能够有效提升开发效率和代码质量。