Files
npm-tool/.qoder/repowiki/zh/content/核心模块/全局配置模块 (TsGlobalConfig).md

363 lines
12 KiB
Markdown
Raw Permalink 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.

# 全局配置模块 (TsGlobalConfig)
<cite>
**本文引用的文件列表**
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [index.js](file://index.js)
- [package.json](file://package.json)
- [README.md](file://README.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向全局配置模块TsGlobalConfig系统性阐述其在工具包中的核心地位与作用以及与网络请求、加解密、存储等模块的集成关系。文档重点覆盖
- 默认配置与动态更新机制
- 配置项类型、作用域与优先级规则
- 完整的配置 API 使用说明
- 配置示例、最佳实践与常见场景
- 错误处理回调与配置验证逻辑
## 项目结构
该工具包采用按功能模块划分的组织方式TsGlobalConfig 作为全局配置中心,被网络请求、加解密、存储等模块以依赖形式使用,对外通过入口文件统一导出。
```mermaid
graph TB
subgraph "入口与导出"
IDX["index.js"]
end
subgraph "配置与工具"
CFG["TsGlobalConfig.js"]
COM["TsCommon.js"]
STO["TsStorage.js"]
end
subgraph "网络与安全"
HTTP["TsHttpUtil.js"]
CRY["TsCrypto.js"]
SM4["TsSM4.js"]
end
IDX --> HTTP
IDX --> CFG
IDX --> STO
IDX --> CRY
IDX --> COM
HTTP --> CFG
HTTP --> STO
HTTP --> COM
CRY --> CFG
CRY --> SM4
```
图表来源
- [index.js](file://index.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
章节来源
- [index.js](file://index.js)
- [package.json](file://package.json)
## 核心组件
- 全局配置中心TsGlobalConfig
- 提供默认配置与运行时配置合并能力
- 暴露配置读取与写入接口,支持动态更新
- 网络请求模块TsHttpUtil
- 通过全局配置决定前缀、附加参数、错误处理回调等行为
- 加密模块TsCrypto
- 从全局配置读取密钥,用于 SM4 加解密
- 存储模块TsStorage
- 与全局配置配合控制是否启用请求体加密开关
章节来源
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
## 架构总览
TsGlobalConfig 作为“全局状态”容器,贯穿请求生命周期的关键节点:
- 请求发起前:根据配置决定 URL 前缀拼接、附加参数注入
- 请求过程中:根据配置决定是否加密请求体
- 请求完成后:根据配置调用错误处理回调
```mermaid
sequenceDiagram
participant Caller as "调用方"
participant Http as "TsHttpUtil"
participant Cfg as "TsGlobalConfig"
participant Sto as "TsStorage"
participant Cry as "TsCrypto"
participant Net as "umi-request"
Caller->>Http : "发起请求"
Http->>Cfg : "读取配置前缀/附加参数/错误回调"
Http->>Sto : "读取用户 Token"
Http->>Http : "根据配置处理参数/附加参数"
alt "需要加密"
Http->>Cry : "读取 base64Key 并加密"
end
Http->>Net : "发送请求"
Net-->>Http : "响应结果"
alt "业务错误"
Http->>Cfg : "调用 onHttpError 回调"
end
Http-->>Caller : "返回处理后的数据"
```
图表来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
## 详细组件分析
### TsGlobalConfig 组件分析
- 默认配置
- 包含基础密钥、URL 前缀、HTTP 错误回调、附加参数函数等
- 配置读取
- 优先读取浏览器全局对象上的运行时配置;若未设置则回退到默认配置
- 配置写入
- 合并传入配置与当前配置,形成最终运行时配置
- 作用域与优先级
- 作用域:浏览器全局 window 对象
- 优先级:运行时配置 > 默认配置
- 配置项类型与用途
- base64KeySM4 密钥Base64 字符串),用于加密/解密
- prefix字符串或函数用于拼接请求 URL 前缀
- onHttpError函数接收后端返回的错误对象用于统一错误处理
- httpParams函数返回附加参数对象用于 GET/POST 注入
```mermaid
flowchart TD
Start(["开始"]) --> ReadRuntime["读取 window.httpConfig"]
ReadRuntime --> HasRuntime{"是否存在运行时配置?"}
HasRuntime -- "是" --> Merge["合并默认配置与运行时配置"]
HasRuntime -- "否" --> UseDefault["使用默认配置"]
Merge --> ReturnCfg["返回最终配置"]
UseDefault --> ReturnCfg
ReturnCfg --> End(["结束"])
```
图表来源
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
章节来源
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
### TsHttpUtil 与全局配置的集成
- URL 前缀处理
- 支持字符串或函数两种形式;函数形式可按 URL 动态生成前缀
- 附加参数注入
- 若配置了 httpParams 函数,则在 GET 参数与非表单 POST 数据中注入
- 错误处理回调
- 当响应码非 200 时,调用 onHttpError 回调
- 请求体加密
- 结合存储模块的开关与全局配置的密钥,对请求体进行加密包装
```mermaid
sequenceDiagram
participant Util as "TsHttpUtil"
participant Cfg as "TsGlobalConfig"
participant Sto as "TsStorage"
participant Net as "umi-request"
Util->>Cfg : "读取 prefix/httpParams/onHttpError"
Util->>Sto : "读取用户 Token"
Util->>Util : "处理分页/equals 等参数"
Util->>Cfg : "调用 httpParams()"
Util->>Net : "发送请求"
Net-->>Util : "返回响应"
alt "业务错误"
Util->>Cfg : "调用 onHttpError(res)"
end
```
图表来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
章节来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
### TsCrypto 与全局配置的集成
- 初始化阶段
- 从全局配置读取 base64Key并转换为字节数组
- 加解密流程
- 基于 SM4 算法,支持 ECB/CBC 模式与 Base64 输出类型
- 配置影响点
- base64Key 变更会直接影响密钥解析与后续加解密结果
```mermaid
classDiagram
class TsCrypto {
+constructor()
+encrypt(content)
+decrypt(base64)
}
class TsSM4 {
+constructor(config)
+encrypt(plaintext)
+decrypt(ciphertext)
}
TsCrypto --> TsSM4 : "组合使用"
```
图表来源
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
章节来源
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
### 配置 API 文档
- setConfig(obj)
- 功能:合并传入配置与当前运行时配置,形成新的全局配置
- 参数obj 为配置对象,键值对应默认配置项
- 注意:仅影响后续请求与加密初始化
- getConfig()
- 功能:返回当前运行时配置(若未设置则回退默认配置)
- 返回:配置对象(包含 base64Key、prefix、onHttpError、httpParams
章节来源
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
### 配置项类型、作用域与优先级
- 类型与含义
- base64Key字符串SM4 密钥Base64 编码)
- prefix字符串或函数用于拼接请求 URL 前缀
- onHttpError函数接收后端返回的错误对象
- httpParams函数返回附加参数对象
- 作用域
- 浏览器全局 window 对象,模块间共享
- 优先级
- 运行时配置优先于默认配置;函数类型的 prefix 可按 URL 动态生效
章节来源
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
### 配置示例与最佳实践
- 示例一:设置 URL 前缀与错误回调
- 在应用启动时调用 setConfig设置 prefix 与 onHttpError
- 之后所有请求自动拼接前缀并统一错误处理
- 示例二:启用请求体加密
- 通过存储模块保存加密开关状态
- TsHttpUtil 在发送请求时读取开关并按需加密
- 最佳实践
- 将全局配置集中初始化,避免分散设置
- prefix 使用函数形式以适配多环境
- onHttpError 中统一记录日志与用户提示
- base64Key 由后端统一管理,避免硬编码
章节来源
- [README.md](file://README.md)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
### 错误处理回调与配置验证逻辑
- 错误处理回调
- TsHttpUtil 在业务错误时调用 onHttpError便于统一处理
- 配置验证
- TsCrypto 在构造时依赖 base64Key 的正确性
- TsSM4 在构造时校验密钥长度与 IV 长度(内部逻辑)
- 建议
- 在 setConfig 后进行一次关键配置的自检
- 对 prefix 函数进行边界测试(如空字符串、特殊字符)
章节来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
## 依赖关系分析
- TsHttpUtil 依赖
- TsGlobalConfig读取前缀、附加参数、错误回调
- TsStorage读取用户 Token、加密开关
- TsCommon通用工具如 JSON 解析)
- TsCrypto 依赖
- TsGlobalConfig读取 base64Key
- TsSM4SM4 加解密实现
- TsStorage 与 TsGlobalConfig 的间接耦合
- 通过开关控制是否启用加密,进而影响请求流程
```mermaid
graph LR
Http["TsHttpUtil"] --> Cfg["TsGlobalConfig"]
Http --> Sto["TsStorage"]
Http --> Com["TsCommon"]
Cry["TsCrypto"] --> Cfg
Cry --> Sm4["TsSM4"]
Sto --> Com
```
图表来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
章节来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
## 性能考量
- 配置读取成本极低,建议在请求发起前一次性读取并缓存必要字段
- prefix 为函数时,每次请求都会执行,建议在函数内做必要的缓存或短路判断
- httpParams 返回的对象会被频繁合并,建议保持对象简洁
- 加密/解密为 CPU 密集型操作,仅在必要时启用
## 故障排查指南
- 症状:请求未带前缀
- 排查:确认 setConfig 是否已设置 prefix若为函数确认返回值
- 症状onHttpError 未触发
- 排查:确认后端返回码非 200确认 onHttpError 是否为函数
- 症状:加密失败或解密异常
- 排查:确认 base64Key 正确;确认前后端密钥一致;确认存储开关状态
- 症状:附加参数未生效
- 排查:确认 httpParams 是否为函数确认请求类型GET/POST是否匹配
章节来源
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
## 结论
TsGlobalConfig 作为工具包的“全局中枢”,通过简单而强大的配置 API实现了对网络请求、加解密、存储等模块的统一控制。合理使用配置项与回调可显著提升系统的可维护性与一致性。建议在应用启动阶段完成全局配置初始化并结合错误处理与日志记录确保问题可追踪、可恢复。
## 附录
- 入口导出
- index.js 将 TsGlobalConfig 与其他模块一起导出,便于外部统一引用
- 版本与依赖
- 依赖 umi-request 与 base64-js用于网络请求与 Base64 编解码
章节来源
- [index.js](file://index.js)
- [package.json](file://package.json)