核心目标:深入理解前端网络通信的底层机制,掌握 Axios 的二次封装技巧,构建统一的请求拦截器与错误处理体系,确保应用的健壮性与可维护性。
📋 本章核心知识点
| 知识点 | 说明 | 难度 |
|---|---|---|
| Axios 核心特性 | 为什么它是前端的首选 | ⭐ |
| 请求拦截器 | 统一注入 Token 与日志 | ⭐⭐⭐ |
| 响应拦截器 | 数据归一化与全局错误跳转 | ⭐⭐⭐ |
| 并发请求 | Promise.all与顺序控制 | ⭐⭐⭐ |
| 请求取消 | AbortController的使用场景 | ⭐⭐⭐⭐ |
6.1 Axios:不仅仅是 Fetch 的包装
虽然现代浏览器提供了fetchAPI,但 Axios 依然是事实上的标准,原因如下:
- 浏览器兼容性:支持更广泛的浏览器。
- 请求/响应拦截:生命周期内任意切入逻辑。
- 自动 JSON 转换:更便捷的数据处理。
- 请求取消:原生支持取消未完成的请求,防止内存泄漏。
6.2 工业级封装:打造稳定的数据层
在项目中,不建议直接在组件里调用axios.get。我们应该进行二次封装。
6.2.1 拦截器:路由的“预处理”
- 请求拦截器:自动从本地获取 Token 并放入 Header。
- 响应拦截器:检查后端返回的状态码。如果是
401,则代表 Token 失效,自动跳转到登录页。
service.interceptors.response.use((response)=>{// 处理后端返回的业务错误码if(response.data.code!==200){ElMessage.error(response.data.msg)returnPromise.reject(newError(response.data.msg))}returnresponse.data;},(error)=>{// 处理网络错误(404, 500 等)handleNetworkError(error);returnPromise.reject(error);})6.3 异步流控制:并发与竞态
6.3.1 并发请求 (Promise.all)
当页面初始化需要同时获取“用户信息”和“系统配置”时,使用并发可以大幅缩短加载时间。
6.3.2 竞态问题与请求取消
场景:用户快速点击搜索按钮,并发出了 10 个请求。由于网络波动,第 1 个请求可能比第 10 个更晚返回,导致页面展示了旧的数据。
方案:在发出新请求前,取消掉上一个正在进行中的相同请求。
6.4 安全性考虑
- 防止 CSRF:通过设置特定的 Header 字段。
- HTTPS:生产环境务必使用加密协议。
- 敏感数据处理:不要在 URL Query 中传递账号密码,务必使用 POST 及 Payload。
📌 章节实战建议
- 环境变量:配合 Vite 的
.env.development和.env.production管理BASE_URL。 - 异常捕获:使用
try...catch配合Await,但要确保拦截器已经过滤了大部分全局错误。 - Mock 数据:在后端接口未就绪时,使用
vite-plugin-mock加速前端开发。
🔗专栏链接:Vue 3 全栈开发实战专栏
📦项目源码资源:点击下载项目源码