统一返回与错误格式
在团队开发中,接口返回格式如果不统一,前端代码容易出现大量冗余判断与重复处理。通过在 Axios 层统一封装返回数据与错误结构,可以让业务代码更加简洁。
1. 典型接口返回格式
后端接口通常返回以下格式的数据结构:
{
"code": 200,
"message": "操作成功",
"data": {
"user": {
"id": 1,
"name": "张三"
}
}
}
`
我们可以根据后端规范定义 Axios 统一的返回模型。
2. 封装响应拦截器统一处理返回数据
在拦截器中只返回 data.data,并对 code 进行判断:
import axios from 'axios';
const service = axios.create({
baseURL: '/api',
timeout: 10000
});
service.interceptors.response.use(
(response) => {
const res = response.data;
if (res.code === 200) {
return res.data;
} else {
console.error('请求错误:', res.message);
return Promise.reject({
code: res.code,
message: res.message || '请求失败',
raw: res
});
}
},
(error) => {
return Promise.reject({
code: error.response?.status || 500,
message: error.message || '网络错误',
raw: error
});
}
);
export default service;
这样业务层拿到的数据始终是处理好的 data,无需再判断 code。
3. 定义统一的响应与错误类型(TypeScript 推荐)
如果你的项目使用 TypeScript,可以定义标准类型:
export interface ApiResponse<T> {
code: number;
message: string;
data: T;
}
export interface ApiError {
code: number;
message: string;
raw?: any;
}
在拦截器中确保所有错误都转化为 ApiError 格式,方便全局捕获。
4. 封装统一的请求函数
通过包装 Axios 请求方法,统一返回 Promise:
export function requestWrapper(promise) {
return promise
.then((data) => [data, null])
.catch((error) => [null, error]);
}
使用时:
const [user, err] = await requestWrapper(api.getUserInfo());
if (err) {
console.error('请求失败:', err.message);
}
这种结构可以避免层层 try/catch,尤其适合在 Vue 或 React 的 async 逻辑中使用。
5. 在全局提示层统一处理错误
你可以结合全局 UI 提示组件(如 Element Plus 的 ElMessage):
import { ElMessage } from 'element-plus';
service.interceptors.response.use(
(res) => {
const data = res.data;
if (data.code !== 200) {
ElMessage.error(data.message || '请求失败');
return Promise.reject(data);
}
return data.data;
},
(error) => {
ElMessage.error(error.message || '网络错误');
return Promise.reject(error);
}
);
这样在所有 API 请求中都能自动弹出错误提示。
6. 最佳实践总结
- ✅ 所有接口统一使用
{ code, message, data }结构 - ✅ 在响应拦截器中规范化
data与error - ✅ 错误对象应包含
code、message、raw三要素 - ✅ 使用全局 UI 层统一展示错误信息
- ✅ 使用
requestWrapper函数减少 try/catch 嵌套
相关内容
- 缓存与重复请求优化 本章节介绍如何在前端项目中使用 Axios 优化请求缓存与防止重复请求,包括浏览器缓存、内存缓存、请求去重策略、拦截器结合缓存、缓存过期处理等方法,帮助提高接口...
- 前端容错与兜底策略 本章节讲解如何在前端使用 Axios 实现容错与兜底策略,包括请求失败处理、默认数据返回、全局错误提示、降级方案、备用接口调用等方法,确保应用在网络异常或接口异...
- 接口统一管理与类型定义 本章节介绍如何在前端项目中使用 Axios 统一管理接口请求,包括接口模块化、统一封装、请求类型定义、TypeScript 类型约束、接口文档维护及调用规范化。...
- 取消请求(CancelToken 与 AbortController) 本章节讲解如何在 Axios 中取消请求,包括使用 CancelToken 和 AbortController 两种方式,适用于用户快速切换页面或重复请求时,防...
- 同时发送多个请求(axios.all / axios.spread) 本章节讲解如何使用 Axios 同时发送多个请求,包括 axios.all 和 axios.spread 的使用方法,帮助前端项目高效处理并发请求,提高数据获取...
- 防止重复请求的策略 本章节讲解如何在 Axios 中防止重复请求,包括使用请求标识、拦截器和节流/防抖机制,避免用户多次触发同一接口导致的冗余请求,提高前端性能和接口稳定性。