# API 参考手册 **本文档引用的文件** - [index.js](file://index.js) - [package.json](file://package.json) - [README.md](file://README.md) - [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. [版本兼容性与迁移](#版本兼容性与迁移) 10. [结论](#结论) ## 简介 npm-tool 是一个功能丰富的 JavaScript 工具包,专为现代 Web 应用开发而设计。该工具包提供了完整的 HTTP 请求处理、数据加密解密、本地存储管理、通用工具函数等功能模块,旨在简化开发者在日常开发中的重复工作。 本工具包的核心特性包括: - 完整的 HTTP 请求封装,支持 GET、POST、表单提交等多种请求方式 - 基于 SM4 算法的安全数据加密解密功能 - 智能的本地存储管理,支持自动序列化和反序列化 - 丰富的通用工具函数,涵盖字符串处理、数据验证等常用操作 - 灵活的全局配置系统,支持运行时动态配置 ## 项目结构 npm-tool 采用模块化的文件组织结构,主要分为以下几个核心目录: ```mermaid graph TB subgraph "项目根目录" A[index.js] B[package.json] C[README.md] end subgraph "源代码目录 (src/)" D[src/utils/] E[src/https/] end subgraph "工具模块 (src/utils/)" F[TsCommon.js] G[TsStorage.js] H[TsCrypto.js] I[TsSM4.js] J[TsGlobalConfig.js] end subgraph "HTTP模块 (src/https/)" K[TsHttpUtil.js] end A --> D A --> E D --> F D --> G D --> H D --> I D --> J E --> K ``` **图表来源** - [index.js:1-16](file://index.js#L1-L16) - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) - [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456) - [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) ## 核心组件 npm-tool 工具包由六个主要模块组成,每个模块都提供特定的功能领域: ### 主要模块概览 | 模块名称 | 文件路径 | 功能描述 | |---------|----------|----------| | TsHttpUtil | src/https/TsHttpUtil.js | HTTP 请求处理和网络通信 | | TsCommon | src/utils/TsCommon.js | 通用工具函数集合 | | TsStorage | src/utils/TsStorage.js | 本地存储管理 | | TsCrypto | src/utils/TsCrypto.js | 数据加密解密服务 | | TsSM4 | src/utils/TsSM4.js | SM4 算法实现 | | TsGlobalConfig | src/utils/TsGlobalConfig.js | 全局配置管理 | ### 版本信息 - **包名**: @tiesheng/npm-tool - **当前版本**: 2.0.6 - **主要依赖**: - base64-js: 1.5.1 (Base64 编码解码) - umi-request: 1.4.0 (HTTP 请求封装) **章节来源** - [package.json:1-24](file://package.json#L1-L24) - [index.js:8-15](file://index.js#L8-L15) ## 架构概览 npm-tool 采用了清晰的分层架构设计,各模块之间通过明确的接口进行交互: ```mermaid graph TB subgraph "应用层" APP[业务应用] end subgraph "HTTP 层" HTTP[TsHttpUtil] CONFIG[TsGlobalConfig] end subgraph "加密层" CRYPTO[TsCrypto] SM4[TsSM4] end subgraph "存储层" STORAGE[TsStorage] COMMON[TsCommon] end subgraph "外部依赖" UMI[umi-request] BASE64[base64-js] end APP --> HTTP HTTP --> CONFIG HTTP --> STORAGE HTTP --> CRYPTO CRYPTO --> SM4 STORAGE --> COMMON HTTP --> UMI CRYPTO --> BASE64 SM4 --> BASE64 ``` **图表来源** - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) - [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) ### 组件交互流程 ```mermaid sequenceDiagram participant Client as 应用客户端 participant HttpUtil as HTTP工具 participant Crypto as 加密服务 participant Storage as 存储服务 participant Config as 配置服务 Client->>HttpUtil : 发起HTTP请求 HttpUtil->>Config : 获取全局配置 HttpUtil->>Storage : 获取用户令牌 HttpUtil->>Crypto : 加密请求数据(可选) HttpUtil->>HttpUtil : 发送网络请求 HttpUtil->>Crypto : 解密响应数据(可选) HttpUtil->>Storage : 更新状态信息 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:41-43](file://src/utils/TsStorage.js#L41-L43) ## 详细组件分析 ### HTTP 请求处理模块 (TsHttpUtil) HTTP 请求处理模块是整个工具包的核心,提供了完整的网络通信能力。 #### 主要功能 1. **HTTP 请求封装**: 支持 GET、POST、表单提交等多种请求方式 2. **数据加密**: 可选的请求体加密功能 3. **响应处理**: 统一的响应数据处理和错误处理 4. **配置管理**: 灵活的全局配置系统 #### API 接口定义 ##### get 方法 - **功能**: 发送 GET 请求 - **参数**: - url: string - 请求的 URL 地址 - params: object - 查询参数对象 (可选) - options: object - 请求选项 (可选) - **返回值**: Promise - 包含 data 和 recordsTotal 的响应对象 - **使用场景**: 获取数据列表、查询详情等 ##### post 方法 - **功能**: 发送 POST 请求 - **参数**: - url: string - 请求的 URL 地址 - data: object - 请求体数据 (可选) - options: object - 请求选项 (可选) - **返回值**: Promise - 包含 data 和 recordsTotal 的响应对象 - **使用场景**: 创建数据、更新数据、登录认证等 ##### form 方法 - **功能**: 发送表单提交请求 - **参数**: - url: string - 请求的 URL 地址 - data: object - 表单数据 (可选) - options: object - 请求选项 (可选) - **返回值**: Promise - 包含 data 和 recordsTotal 的响应对象 - **使用场景**: 文件上传、表单提交等 ##### req 方法 - **功能**: 基础请求方法,其他方法的底层实现 - **参数**: - url: string - 请求的 URL 地址 - options: object - 请求选项 - **返回值**: Promise - 统一的响应对象 - **使用场景**: 自定义请求配置 #### 错误处理机制 ```mermaid flowchart TD Start([请求开始]) --> CheckPrefix["检查URL前缀"] CheckPrefix --> AddHeaders["添加请求头信息"] AddHeaders --> SendRequest["发送HTTP请求"] SendRequest --> CheckResponse{"检查响应状态"} CheckResponse --> |状态码为200| CheckEncrypt{"检查是否需要解密"} CheckResponse --> |状态码非200| HandleError["调用错误处理器"] CheckEncrypt --> |需要解密| DecryptData["解密响应数据"] CheckEncrypt --> |不需要解密| ReturnData["直接返回数据"] DecryptData --> ParseJSON["解析JSON数据"] ParseJSON --> ReturnData HandleError --> CallErrorHandler["调用全局错误处理器"] CallErrorHandler --> ReturnError["返回错误对象"] ReturnData --> End([请求结束]) ReturnError --> End ``` **图表来源** - [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35) - [TsHttpUtil.js:117-128](file://src/https/TsHttpUtil.js#L117-L128) **章节来源** - [TsHttpUtil.js:142-165](file://src/https/TsHttpUtil.js#L142-L165) ### 数据加密解密模块 (TsCrypto) 数据加密解密模块提供了基于 SM4 算法的安全数据保护功能。 #### 主要功能 1. **SM4 加密**: 使用 SM4 算法对数据进行加密 2. **SM4 解密**: 对加密数据进行解密 3. **密钥管理**: 基于 Base64 的密钥处理 4. **模式支持**: 支持 ECB 和 CBC 两种加密模式 #### API 接口定义 ##### encrypt 方法 - **功能**: 加密输入内容 - **参数**: - content: string | object - 需要加密的内容 - **返回值**: string - 加密后的 Base64 字符串 - **使用场景**: 敏感数据传输、API 参数加密 ##### decrypt 方法 - **功能**: 解密输入内容 - **参数**: - base64: string - Base64 编码的加密数据 - **返回值**: string - 解密后的原始内容 - **使用场景**: 处理服务器返回的加密数据 #### 加密算法实现 ```mermaid classDiagram class TsCrypto { -sm4 : SM4 +constructor() +encrypt(content) string +decrypt(base64) string } class SM4 { -key : Uint8Array -iv : Uint8Array -mode : string -cipherType : string -encryptRoundKeys : Uint32Array -decryptRoundKeys : Uint32Array +constructor(config) +encrypt(plaintext) string +decrypt(ciphertext) string -padding(buffer) Uint8Array -dePadding(buffer) Uint8Array -doBlockCrypt(blockData, roundKeys) Uint32Array } TsCrypto --> SM4 : "组合关系" ``` **图表来源** - [TsCrypto.js:5-34](file://src/utils/TsCrypto.js#L5-L34) - [TsSM4.js:96-456](file://src/utils/TsSM4.js#L96-L456) **章节来源** - [TsCrypto.js:19-30](file://src/utils/TsCrypto.js#L19-L30) ### 本地存储模块 (TsStorage) 本地存储模块提供了便捷的本地数据管理功能。 #### 主要功能 1. **通用存储**: 支持任意类型的对象存储 2. **用户令牌管理**: 专门的用户认证令牌存储 3. **加密开关**: 控制请求体是否加密 4. **数据序列化**: 自动处理 JSON 序列化和反序列化 #### API 接口定义 ##### save 方法 - **功能**: 保存数据到本地存储 - **参数**: - key: string - 存储键名 - value: any - 需要存储的值 - **返回值**: void - **使用场景**: 保存用户偏好设置、临时数据等 ##### get 方法 - **功能**: 从本地存储获取数据 - **参数**: - key: string - 存储键名 - def: any - 默认值 (可选) - **返回值**: any - 存储的值或默认值 - **使用场景**: 读取用户配置、应用状态等 ##### saveUserToken 方法 - **功能**: 保存用户认证令牌 - **参数**: - token: string - 用户令牌 - **返回值**: void - **使用场景**: 登录后保存用户身份信息 ##### getUserToken 方法 - **功能**: 获取用户认证令牌 - **参数**: 无 - **返回值**: string - 用户令牌或空字符串 - **使用场景**: 每次请求时添加认证信息 ##### saveEncryptBody 方法 - **功能**: 设置是否启用请求体加密 - **参数**: - bool: boolean - 加密开关 (默认 true) - **返回值**: void - **使用场景**: 控制数据传输安全性 ##### getEncryptBody 方法 - **功能**: 获取请求体加密状态 - **参数**: 无 - **返回值**: boolean - 加密状态 - **使用场景**: 检查当前加密配置 **章节来源** - [TsStorage.js:31-43](file://src/utils/TsStorage.js#L31-L43) ### 通用工具模块 (TsCommon) 通用工具模块提供了常用的辅助函数。 #### 主要功能 1. **字符串处理**: URL 参数解析、字符串替换等 2. **数据验证**: 空值检查、JSON 解析等 3. **环境检测**: 开发环境判断 4. **数组操作**: 字符串分割等 #### API 接口定义 ##### getParamFormUrl 方法 - **功能**: 从 URL 中提取指定参数 - **参数**: - key: string - 参数键名 - host: string - URL 字符串 (可选) - **返回值**: string - 参数值或空字符串 - **使用场景**: 解析页面 URL 参数 ##### isEmpty 方法 - **功能**: 检查值是否为空 - **参数**: - value: any - 需要检查的值 - **返回值**: boolean - 是否为空 - **使用场景**: 数据验证、条件判断 ##### parseJSON 方法 - **功能**: 安全地解析 JSON 字符串 - **参数**: - value: string - JSON 字符串 - def: any - 默认值 (可选) - **返回值**: any - 解析后的对象或默认值 - **使用场景**: 安全地解析存储的数据 ##### split 方法 - **功能**: 分割字符串为数组 - **参数**: - obj: string - 需要分割的字符串 - seq: string - 分隔符 (默认 ',') - **返回值**: string[] - 分割后的数组 - **使用场景**: 处理逗号分隔的配置项 ##### isDevelopment 方法 - **功能**: 检查是否为开发环境 - **参数**: 无 - **返回值**: boolean - 是否为开发环境 - **使用场景**: 条件性执行开发相关逻辑 ##### replaceAll 方法 - **功能**: 替换字符串中所有匹配的部分 - **参数**: - string: string - 原始字符串 - **返回值**: string - 处理后的字符串 - **使用场景**: 文本处理、格式化 ##### endWith 方法 - **功能**: 检查字符串是否以指定后缀结尾 - **参数**: - string: string - 原始字符串 - endStr: string - 检查的后缀 - **返回值**: boolean - 是否以指定后缀结尾 - **使用场景**: 文件扩展名检查、路径处理 **章节来源** - [TsCommon.js:4-87](file://src/utils/TsCommon.js#L4-L87) ### 全局配置模块 (TsGlobalConfig) 全局配置模块提供了灵活的配置管理系统。 #### 主要功能 1. **默认配置**: 提供合理的默认配置值 2. **配置合并**: 支持运行时配置覆盖 3. **动态配置**: 支持函数形式的动态配置 4. **错误处理**: 自定义 HTTP 错误处理逻辑 #### API 接口定义 ##### getConfig 方法 - **功能**: 获取当前配置 - **参数**: 无 - **返回值**: object - 当前配置对象 - **使用场景**: 读取全局配置信息 ##### setConfig 方法 - **功能**: 设置或更新配置 - **参数**: - obj: object - 需要更新的配置项 - **返回值**: void - **使用场景**: 应用启动时初始化配置 #### 默认配置项 | 配置项 | 类型 | 默认值 | 描述 | |-------|------|--------|------| | base64Key | string | "WmdUzPJXbngVNiaSsQrihg==" | SM4 加密密钥 | | prefix | string/function | "" | API 请求前缀 | | onHttpError | function | 空函数 | HTTP 错误处理回调 | | httpParams | function | 空函数 | 额外请求参数生成器 | **章节来源** - [TsGlobalConfig.js:5-29](file://src/utils/TsGlobalConfig.js#L5-L29) ## 依赖关系分析 npm-tool 工具包的依赖关系清晰明确,遵循了模块化设计原则: ```mermaid graph TB subgraph "核心模块" A[TsHttpUtil] B[TsCrypto] C[TsStorage] D[TsCommon] E[TsGlobalConfig] F[TsSM4] end subgraph "外部依赖" G[umi-request] H[base64-js] end subgraph "应用集成" I[业务应用] end I --> A A --> B A --> C A --> D A --> E A --> G B --> F B --> H C --> D E --> I ``` **图表来源** - [index.js:1-6](file://index.js#L1-L6) - [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5) ### 模块耦合度分析 - **低耦合**: 各模块职责明确,相互独立 - **单向依赖**: 依赖关系呈树状结构,避免循环依赖 - **接口清晰**: 模块间通过明确定义的接口进行交互 ### 性能特征 - **内存使用**: 模块化设计减少不必要的内存占用 - **加载时间**: 按需加载,首屏加载时间短 - **运行效率**: 原生 JavaScript 实现,性能优异 **章节来源** - [package.json:19-22](file://package.json#L19-L22) ## 性能考虑 ### 内存优化 1. **模块懒加载**: 通过 require 方式实现按需加载 2. **对象复用**: 复用加密解密过程中的中间对象 3. **内存清理**: 及时释放不再使用的变量 ### 网络性能 1. **连接复用**: 基于 umi-request 的连接池管理 2. **请求缓存**: 支持 Cookie 自动携带 3. **超时控制**: 可配置的请求超时时间 ### 加密性能 1. **算法优化**: SM4 算法实现经过优化 2. **批量处理**: 支持批量数据处理 3. **内存管理**: 合理的内存分配策略 ## 故障排除指南 ### 常见问题及解决方案 #### HTTP 请求失败 **问题症状**: 请求返回错误状态码或抛出异常 **可能原因**: 1. 网络连接问题 2. 服务器端错误 3. 认证信息缺失 4. 请求参数格式错误 **解决步骤**: 1. 检查网络连接状态 2. 验证服务器地址和端口 3. 确认用户令牌有效性 4. 查看浏览器开发者工具中的网络请求 #### 数据加密失败 **问题症状**: 加密或解密操作抛出异常 **可能原因**: 1. 密钥长度不正确 2. IV 向量配置错误 3. 数据格式不符合要求 **解决步骤**: 1. 验证密钥长度为 16 字节 2. 检查 IV 向量配置 3. 确认输入数据格式 #### 存储数据丢失 **问题症状**: 本地存储的数据无法读取 **可能原因**: 1. 浏览器存储空间不足 2. 浏览器隐私模式限制 3. 存储键名冲突 **解决步骤**: 1. 检查浏览器存储空间 2. 尝试在普通模式下使用 3. 使用唯一的存储键名 ### 错误处理最佳实践 ```mermaid flowchart TD Start([开始处理]) --> TryRequest["尝试执行操作"] TryRequest --> Success{"操作成功?"} Success --> |是| Complete["完成处理"] Success --> |否| CatchError["捕获错误"] CatchError --> CheckErrorType{"检查错误类型"} CheckErrorType --> |网络错误| HandleNetwork["处理网络错误"] CheckErrorType --> |数据错误| HandleData["处理数据错误"] CheckErrorType --> |配置错误| HandleConfig["处理配置错误"] HandleNetwork --> LogError["记录错误日志"] HandleData --> LogError HandleConfig --> LogError LogError --> Retry{"需要重试?"} Retry --> |是| RetryOperation["重试操作"] Retry --> |否| NotifyUser["通知用户"] RetryOperation --> TryRequest NotifyUser --> End([结束]) Complete --> End ``` **图表来源** - [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35) ## 版本兼容性与迁移 ### 版本历史 根据 package.json 显示,当前版本为 2.0.6,这是一个稳定的发布版本。 ### 兼容性信息 - **Node.js 版本**: 支持 Node.js 12+ 版本 - **浏览器兼容性**: 支持现代浏览器 (Chrome 60+, Firefox 55+, Safari 12+) - **ESLint 规范**: 遵循 ES6+ 语法规范 ### 迁移指南 #### 从旧版本升级 1. **备份现有配置**: 在升级前备份所有自定义配置 2. **检查依赖版本**: 确保依赖包版本符合要求 3. **测试关键功能**: 升级后重点测试 HTTP 请求和加密功能 4. **更新导入方式**: 确保正确的模块导入语法 #### API 变更注意事项 1. **命名规范**: 保持一致的 API 命名约定 2. **参数验证**: 新增参数时提供合理的默认值 3. **错误处理**: 统一错误处理机制 4. **文档同步**: 及时更新 API 文档 ### 最佳实践建议 1. **版本锁定**: 在生产环境中锁定具体版本号 2. **持续监控**: 监控工具包的使用情况和性能指标 3. **定期更新**: 定期检查新版本的安全补丁和功能更新 4. **测试覆盖**: 为关键功能编写单元测试 ## 结论 npm-tool 工具包是一个设计精良、功能完备的 JavaScript 工具集。它通过模块化的设计理念,将复杂的网络通信、数据处理、安全加密等功能封装成易于使用的 API 接口。 ### 主要优势 1. **功能全面**: 涵盖了现代 Web 开发的常见需求 2. **设计优雅**: 清晰的模块划分和接口设计 3. **性能优秀**: 原生 JavaScript 实现,运行效率高 4. **易于使用**: 简洁的 API 设计,学习成本低 ### 适用场景 - 快速原型开发 - 中小型 Web 应用 - 移动端 Hybrid 应用 - 微信小程序开发 ### 发展方向 随着前端技术的不断发展,npm-tool 工具包将继续演进,计划增加的功能包括: - 更多的加密算法支持 - 更完善的错误处理机制 - 更丰富的配置选项 - 更好的 TypeScript 支持