Vue3 后台框架的网络请求怎么设计?看 XYGo Admin 三套 Axios 实例与拦截器方案

Vue3 后台框架的网络请求怎么设计?看 XYGo Admin 三套 Axios 实例与拦截器方案

做后台管理项目,网络请求层是最容易写乱的地方------Token 混用、接口前缀硬编码、拦截器逻辑散落各处。接手过屎山项目的同学应该都懂。

XYGo Admin 在这方面做了一层很清晰的封装,今天拆开聊聊它的设计思路。

三套请求实例,各司其职

最核心的设计是用 createPrefixedApi(prefix) 工厂函数,按业务域拆出三个独立实例:

typescript 复制代码
// 后台管理接口 --- 自动注入 Bearer Token
export const adminRequest = createPrefixedApi('/admin')

// 前台会员接口 --- 自动注入 Xy-User-Token
export const memberRequest = createPrefixedApi('/member')

// 前台公共接口 --- 无需 Token
export const siteRequest = createPrefixedApi('/site')

这个设计妙在哪?不同域天然隔离,不用每次调接口时手动区分 Token 类型。后台管理员和前台会员使用的是完全不同的认证体系,在一个项目里分开管理远比混在一起安全。

每个实例提供五个标准方法:

方法 说明
adminRequest.get<T>({ url, params?, config? }) GET 请求
adminRequest.post<T>({ url, params?, config? }) POST 请求
adminRequest.put<T>({ url, params?, config? }) PUT 请求
adminRequest.del<T>({ url, params?, config? }) DELETE 请求
adminRequest.request<T>(config) 通用请求

拦截器的自动分流逻辑

请求拦截器做的事情很纯粹------根据 URL 前缀自动选择 Token 注入策略:

  • /admin 开头 → Authorization: Bearer <token>
  • /member 开头 → Xy-User-Token: <token>
  • 其他 → 不注入 Token

响应拦截器对业务码做了分层处理:

  • 0 (success) :直接返回 response.data.data,业务代码不用多解一层
  • -1 (error) :ElMessage 提示错误信息
  • 61 (unauthorized):清除 Token + 跳转登录页,带 3 秒防抖避免并发请求反复跳
  • 10010 (kickedOut):弹窗提示被踢下线

防抖跳转登录这个细节挺实用------多个接口同时返回 401 时不会弹出一串登录页。

实际使用:API 层怎么写

封装完后,业务代码里调用就非常干净:

typescript 复制代码
import { adminRequest } from '@/utils/http'

export function fetchDocList(params: any) {
  return adminRequest.get({ url: '/cmsDoc/list', params })
}

export function fetchSaveDoc(data: any) {
  return adminRequest.post({ url: '/cmsDoc/edit', params: data })
}

export function fetchDeleteDoc(id: number) {
  return adminRequest.post({ url: '/cmsDoc/delete', params: { id } })
}

每个 API 文件只负责声明接口,不关心 Token、不关心错误处理,职责单一。

配置项一览

  • baseURL :来自环境变量 VITE_API_URL,切换环境不用改代码
  • 超时:15 秒,够用也不拖沓
  • 失败重试:可配置,默认关闭

总结

XYGo Admin 的网络请求层设计不算花哨,但务实------三实例隔离前后台认证、拦截器自动分流 Token、响应码分层处理,该有的都有。这种封装思路可以直接复用到你自己的 Vue3 后台管理框架 里。对后台管理框架感兴趣的同学,可以去 XYGo Admin 官网看完整的项目结构和代码实现。

相关推荐
福兮说10 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66611 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)11 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan12 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_12 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒13 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技13 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu14 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙14 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript