Axios 失败统一处理的实现方法
在现代前端开发中,HTTP 请求是不可或缺的部分,而使用 Axios 发送请求时,我们经常需要对错误进行处理。为了避免在每一个请求中重复代码,可以通过统一处理的方式,提升代码的可维护性和可读性。接下来,我们将介绍如何实现 Axios 失败的统一处理,具体流程如下:
步骤 | 描述 |
---|---|
1 | 安装 Axios |
2 | 创建 Axios 实例 |
3 | 设置请求拦截器 |
4 | 设置响应拦截器 |
5 | 封装错误处理函数 |
6 | 使用 Axios 实例进行请求 |
步骤详解
1. 安装 Axios
首先,你需要在项目中安装 Axios。可以使用 npm 或 yarn 安装:
npm install axios
# 或者
yarn add axios
2. 创建 Axios 实例
创建一个 Axios 实例,以便于我们在项目中使用和管理:
import axios from 'axios';
// 创建 Axios 实例
const axiosInstance = axios.create({
baseURL: ' // 设置基础 URL
timeout: 10000, // 设置超时时间
});
3. 设置请求拦截器
请求拦截器用于在请求发送前进行一些处理,比如添加 token:
axiosInstance.interceptors.request.use(
(config) => {
// 在请求头中添加 Authorization 字段
const token = localStorage.getItem('token');
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
return config; // 一定要返回 config
},
(error) => {
return Promise.reject(error); // 请求错误时,直接返回错误
}
);
4. 设置响应拦截器
响应拦截器用于统一处理请求返回的数据或错误响应:
axiosInstance.interceptors.response.use(
(response) => {
// 直接返回响应数据
return response.data;
},
(error) => {
handleError(error); // 统一错误处理
return Promise.reject(error); // 返回 Promise 的拒绝状态
}
);
5. 封装错误处理函数
封装一个专门的错误处理函数,用于处理不同的错误类型:
function handleError(error) {
if (error.response) {
// 请求已发出,但服务器响应状态码不在 2xx 范围内
console.error(`Error: ${error.response.status} - ${error.response.data.message}`);
alert('请求失败: ' + error.response.data.message);
} else if (error.request) {
// 请求已发出,但没有收到响应
console.error('Error: 请求未收到响应');
alert('请求未收到响应');
} else {
// 其他错误
console.error('Error:', error.message);
alert('发生错误: ' + error.message);
}
}
6. 使用 Axios 实例进行请求
现在你可以使用这个配置好的 Axios 实例进行请求,如下所示:
axiosInstance.get('/endpoint')
.then((data) => {
console.log('请求成功:', data);
})
.catch((error) => {
// 错误处理已在拦截器中完成
});
journey
title Axios 失败统一处理流程
section 安装 Axios
安装npm或yarn: 5: user
section 创建 Axios 实例
创建实例并设置baseURL和timeout: 5: user
section 设置请求拦截器
添加请求拦截器增加token: 5: user
section 设置响应拦截器
处理响应数据和错误: 5: user
section 封装错误处理函数
处理不同类型的错误: 5: user
section 使用 Axios 实例进行请求
发起请求并处理响应: 5: user
结尾
通过上述流程,你成功实现了 Axios 失败的统一处理。这样做不仅简化了代码的复杂度,还提高了代码的可重用性和可维护性。希望你能够在实践中灵活运用这些知识,提升你的开发技能。如果在实现过程中遇到任何问题,欢迎随时询问!