Skip to content

请求封装 ​

这篇解决什么 ​

业务 API 怎么拿到 data、Token 和租户头谁加的、code !== 0 怎么提示。读完只从 #/api/request 出 requestClient,不要每个页面自己 axios。

后端统一 CommonResult:code / msg / data,成功 code === 0。默认端口 48080,开发代理见 前端工程结构。

示意图:页面只调模块 API。头和加解密在拦截器。

从哪改 ​

名称说明仓库路径
客户端responseReturn: 'data',超时 60sruoyi-office-vben/apps/web-antd/src/api/request.ts
模块 API按后端分包src/api/{module}/
权限信息GET /system/auth/get-permission-infosrc/api/core/auth.ts
后端包装CommonResultruoyi-office/yudao-framework/
开发代理/admin-api → localhost:48080/admin-apiapps/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,拦截器剥 datadefaultResponseInterceptor
tenant-id当前租户请求拦截器
isEncrypt头上标记后加密 bodycreateApiEncrypt

不要自己拼完整 /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。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版