请求封装
这篇解决什么
业务 API 怎么拿到 data、Token 和租户头谁加的、code !== 0 怎么提示。读完只从 #/api/request 出 requestClient,不要每个页面自己 axios。
后端统一 CommonResult:code / msg / data,成功 code === 0。默认端口 48080,开发代理见 前端工程结构。
示意图:页面只调模块 API。头和加解密在拦截器。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 客户端 | responseReturn: 'data',超时 60s | ruoyi-office-vben/apps/web-antd/src/api/request.ts |
| 模块 API | 按后端分包 | src/api/{module}/ |
| 权限信息 | GET /system/auth/get-permission-info | src/api/core/auth.ts |
| 后端包装 | CommonResult | ruoyi-office/yudao-framework/ |
| 开发代理 | /admin-api → localhost:48080/admin-api | apps/web-antd/vite.config.ts |
请求拦截器会写:
Authorization: Bearer {accessToken}Accept-Language跟偏好语言tenant-id、登录后的visit-tenant-id(多租户开启时)- 当前部门
current-dept-id
defaultResponseInterceptor 认 codeField=code、successCode=0,业务函数直接拿到 data。401 走刷新令牌;刷新失败再登出。下载接口若把 {code:401} 包进 JSON Blob,另有拦截器拆开,避免当成文件。
装饰性接口可传 errorMessageMode: 'none',失败不弹 toast。官网备用机维护弹窗走 handleOfficialStandbyError,不要在业务页再抄一套。
需要自己带 Token、不要默认拆 data 时,用 baseRequestClient。登录、刷新令牌属于这一类。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
code / data | 成功码 0,拦截器剥 data | defaultResponseInterceptor |
tenant-id | 当前租户 | 请求拦截器 |
isEncrypt | 头上标记后加密 body | createApiEncrypt |
不要自己拼完整 /admin-api
baseURL 已是网关前缀。模块 API 写 /iot/device/page。再写一遍 /admin-api 会 404。
日期按接口真实类型
LocalDateTime 默认 epoch millis,请求体用数字。纯日期是 yyyy-MM-DD 字符串。不要把 Dayjs 对象直接 POST。
ts
export const requestClient = createRequestClient(apiURL, {
responseReturn: 'data',
timeout: 60_000,
});摘自 apps/web-antd/src/api/request.ts。
