| 功能 | JeecgBoot | 当前实现 | 说明 |
|---|---|---|---|
| 请求拦截 | ✅ | ✅ | 添加通用请求头、处理参数 |
| 响应拦截 | ✅ | ✅ | 统一处理响应数据 |
| 错误处理 | ✅ | ✅ | HTTP 状态码错误提示 |
| 超时控制 | ✅ | ✅ | 默认 30 秒超时 |
| Cookie 认证 | ❌ | ✅ | 使用 Cookie 而非 Token |
| GET 防缓存 | ✅ | ✅ | 自动添加时间戳 |
| API 前缀 | ✅ | ✅ | 统一添加 /sohoyw-som |
| 消息提示 | ✅ | ✅ | 使用 Notification 组件 |
以下是 JeecgBoot 中的高级功能,可根据需要添加:
// JeecgBoot 实现
config.headers[ConfigEnum.TIMESTAMP] = signMd5Utils.getTimestamp();
config.headers[ConfigEnum.Sign] = signMd5Utils.getSign(config.url, config.params, config.data);
是否需要: 取决于后端是否要求签名验证
// JeecgBoot 实现
config.headers[ConfigEnum.TENANT_ID] = tenantId;
是否需要: 如果系统支持多租户,需要添加
// JeecgBoot 使用 axios 的 CancelToken
// 当前可以使用 AbortController 实现
是否需要: 防止用户快速点击导致重复请求
// JeecgBoot 支持 SSE 流式响应
config.responseType = 'stream';
是否需要: 如果有 AI 对话等流式场景
// JeecgBoot 支持下载进度、文件名提取等
是否需要: 如果有大文件下载需求
// 失败后自动重试
retryCount: 3,
retryDelay: 1000
是否需要: 提高网络不稳定时的成功率
// 记录所有请求到 errorLog store
errorLogStore.addAjaxErrorInfo(error);
是否需要: 用于问题排查和监控
如果需要添加某个功能,可以参考以下步骤:
// src/utils/sign.ts
export function generateSign(url: string, params: any, data: any): string {
// 实现签名逻辑
}
// src/utils/request.ts
config.headers['X-Sign'] = generateSign(url, params, data);
config.headers['X-Timestamp'] = Date.now();
// src/utils/request.ts
const tenantId = getTenantId(); // 从 localStorage 或 context 获取
config.headers['X-Tenant-ID'] = tenantId;
// src/utils/request.ts
const pendingRequests = new Map<string, AbortController>();
// 在请求前检查并取消重复请求
const requestKey = `${method}:${url}`;
if (pendingRequests.has(requestKey)) {
pendingRequests.get(requestKey)?.abort();
}
当前的 request.ts 实现已经覆盖了大部分常用场景,代码简洁易维护。
建议:
如果后端明确要求某些功能(如签名、租户ID),再添加对应的实现。