axios 封装
时间: 2025-05-26 19:27:06 浏览: 22
### 如何封装 Axios 以简化 HTTP 请求并增强功能
#### 封装的意义
通过封装 Axios,开发者能够在 Vue 或其他前端框架中统一处理 HTTP 请求,从而提升代码的可维护性和可扩展性。这种封装方式允许配置统一的请求头、拦截器以及错误处理逻辑,减少冗余代码的同时也提高了开发效率[^1]。
---
#### 封装的具体实现步骤
##### 1. 安装 Axios
在项目中引入 Axios 是第一步操作。可以通过 npm 或 yarn 进行安装:
```bash
npm install axios
```
或者使用 Yarn:
```bash
yarn add axios
```
---
##### 2. 创建 Axios 实例
为了便于管理和定制化需求,通常会创建一个独立的 Axios 实例,并在此基础上进行进一步封装。
```javascript
// src/utils/request.js
import axios from 'axios';
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 设置基础 URL 地址
timeout: 5000, // 超时时间 (毫秒)
headers: { // 默认请求头
'Content-Type': 'application/json',
},
});
export default service;
```
此部分实现了基本的 Axios 配置,包括 `baseURL` 和超时设置等参数[^3]。
---
##### 3. 添加请求拦截器
请求拦截器用于在发送请求前对数据或配置进行预处理,例如添加 Token 认证信息或其他公共字段。
```javascript
service.interceptors.request.use(
config => {
const token = localStorage.getItem('token'); // 假设 Token 存储于本地存储
if (token) {
config.headers['Authorization'] = `Bearer ${token}`; // 自动携带认证信息
}
return config;
},
error => {
console.error(error); // 打印错误日志
Promise.reject(error);
}
);
```
这段代码展示了如何动态注入 Token 到请求头部,同时提供了错误捕获机制。
---
##### 4. 添加响应拦截器
响应拦截器负责对接收到的数据进行初步解析和异常处理,确保返回给业务层的是干净的结果。
```javascript
service.interceptors.response.use(
response => {
const res = response.data;
if (res.code && res.code !== 200) { // 如果服务端返回的状态码不正常,则抛出错误
Message.error(res.message || 'Error');
return Promise.reject(new Error(res.message || 'Request failed'));
} else {
return res; // 返回成功后的数据体
}
},
error => {
if (error.response) {
switch (error.response.status) {
case 401:
MessageBox.confirm('登录状态已过期,请重新登录', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
window.location.href = '/login'; // 跳转到登录页
});
break;
case 403:
Message.error('权限不足');
break;
case 404:
Message.error('资源未找到');
break;
default:
Message.error(`服务器内部错误(${error.response.status})`);
}
} else {
Message.error('网络连接失败');
}
return Promise.reject(error);
}
);
```
这里不仅完成了常规的成功/失败判断,还针对不同类型的 HTTP 错误进行了个性化提示。
---
##### 5. 封装通用请求方法
为了让调用更加直观简单,可以提供一些便捷的方法来发起 GET、POST 等常见请求类型。
```javascript
export function get(url, params = {}) {
return service.get(url, { params });
}
export function post(url, data = {}, options = {}) {
return service.post(url, data, options);
}
```
这些函数隐藏了底层细节,使得组件中的实际调用变得非常简洁明了[^2]。
---
##### 6. 使用封装好的 Axios 实例
最后,在任何需要的地方都可以轻松导入并利用这个经过优化过的工具库完成各种 API 的交互工作。
```javascript
import { get, post } from '@/utils/request';
get('/api/user/info').then(response => {
console.log('User Info:', response);
});
post('/api/login', { username: 'admin', password: 'password' })
.then(response => {
console.log('Login Success:', response);
})
.catch(err => {
console.error('Login Failed:', err);
});
```
以上例子说明了如何快速集成封装版 Axios 来执行具体的接口访问任务。
---
#### 总结
通过对 Axios 的全面封装,不仅可以显著降低重复劳动量,还能有效改善项目的整体架构质量。无论是简单的 CRUD 操作还是复杂的跨域通信场景,都能从中受益匪浅[^1]。
---
阅读全文
相关推荐


















