已成功将请求封装从 fetch 迁移到 axios,完整复刻 JeecgBoot 前端的请求封装。
src/utils/http/
├── index.ts # 主入口,配置 transform
├── Axios.ts # Axios 封装类
├── axiosTransform.ts # 转换器接口定义
├── checkStatus.ts # HTTP 状态码检查
└── helper.ts # 辅助函数
src/utils/
├── sign.ts # 请求签名(MD5)
└── tenant.ts # 多租户管理
src/types/
└── axios.d.ts # 类型定义
import { defHttp } from "@/utils/http";
// GET 请求
const data = await defHttp.get({ url: "/api/users", params: { id: 1 } });
// POST 请求
const result = await defHttp.post({ url: "/api/users", data: { name: "张三" } });
// PUT 请求
await defHttp.put({ url: "/api/users/1", data: { name: "李四" } });
// DELETE 请求
await defHttp.delete({ url: "/api/users/1" });
import { defHttp } from "@/utils/http";
// 单文件上传
const file = document.querySelector('input[type="file"]').files[0];
const result = await defHttp.uploadFile(
{ url: "/api/upload" },
{ file, name: "file" }
);
import { userService } from "@/services";
// 分页查询
const users = await userService.list({ pageNo: 1, pageSize: 10 });
// CRUD 操作
await userService.add({ username: "test" });
await userService.edit({ id: "1", username: "updated" });
await userService.delete("1");
// 跳过错误提示
const data = await defHttp.get(
{ url: "/api/check" },
{ errorMessageMode: "none" }
);
// 显示成功提示
await defHttp.post(
{ url: "/api/save", data: {} },
{ successMessageMode: "success" }
);
// 返回原生响应
const response = await defHttp.get(
{ url: "/api/data" },
{ isReturnNativeResponse: true }
);
所有请求会自动添加以下请求头:
{
"X-Timestamp": "1234567890", // 时间戳
"X-Sign": "abc123...", // MD5 签名
"X-Version": "v3", // 版本标识
"X-Tenant-ID": "0", // 租户ID
"Content-Type": "application/json" // 内容类型
}
请求签名使用 MD5 算法:
签名字符串 = URL路径 + 排序后的参数 + 签名密钥
签名 = MD5(签名字符串)
示例:
URL: /api/user/list
参数: { name: "张三", age: 20 }
密钥: DD05F1C54D63749EEEB10B4F8B6830B1
签名字符串: /api/user/listaage=20&name=张三DD05F1C54D63749EEEB10B4F8B6830B1
签名: MD5(签名字符串)
系统支持多租户,会自动从 localStorage 读取租户ID:
// 设置租户ID
import { setTenantId } from "@/utils/tenant";
setTenantId("123");
// 设置临时租户ID(优先级更高)
import { setShareTenantId } from "@/utils/tenant";
setShareTenantId("456");
| 功能 | JeecgBoot | 当前实现 | 说明 |
|---|---|---|---|
| 基础库 | axios | axios | ✅ 相同 |
| 请求签名 | ✅ | ✅ | ✅ 已实现 |
| 多租户 | ✅ | ✅ | ✅ 已实现 |
| Token 认证 | ✅ | ❌ | 使用 Cookie 代替 |
| 请求取消 | ✅ | ❌ | 可选功能 |
| 流式数据 | ✅ | ❌ | 可选功能 |
| 低代码应用ID | ✅ | ❌ | 特定场景 |
| 乾坤微前端 | ✅ | ❌ | 特定场景 |
如需修改签名密钥或其他配置,编辑以下文件:
// src/utils/sign.ts
const SIGN_KEY = "DD05F1C54D63749EEEB10B4F8B6830B1"; // 修改签名密钥
// src/config/api.ts
export const API_PREFIX = "/sohoyw-som"; // 修改API前缀
export const TIMEOUT = 30000; // 修改超时时间
现在项目已经完全使用 axios + JeecgBoot 风格的请求封装!