axios拦截器如何拦截请求错误或者响应错误
在使用axios进行网络请求时,我们经常需要处理请求错误或者响应错误的情况。为了提高代码复用性和可维护性,axios提供了拦截器的功能,可以在请求发送前和响应返回后进行拦截和处理。
1. 请求拦截器
请求拦截器可以在发送请求前对请求进行处理,比如添加公共参数、设置请求头等操作。我们可以通过axios的interceptors.request.use
方法来注册一个请求拦截器。
axios.interceptors.request.use(
(config) => {
// 在发送请求之前做些什么
// 添加公共参数
config.params = {
...config.params,
token: 'your_token',
};
// 设置请求头
config.headers['Content-Type'] = 'application/json';
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
上面的代码中,我们通过axios.interceptors.request.use
方法注册了一个请求拦截器。config
参数是请求的配置对象,可以在这里对请求进行修改。error
参数是请求错误对象,我们可以在这里处理请求错误。
2. 响应拦截器
响应拦截器可以在接收到响应后对响应进行处理,比如根据返回的状态码进行统一的错误处理、对返回的数据进行统一的格式化等操作。我们可以通过axios的interceptors.response.use
方法来注册一个响应拦截器。
axios.interceptors.response.use(
(response) => {
// 对响应数据做些什么
// 根据业务需求进行处理
if (response.data.code !== 200) {
// 返回错误信息
return Promise.reject(response.data.message);
}
return response.data;
},
(error) => {
// 对响应错误做些什么
return Promise.reject(error);
}
);
上面的代码中,我们通过axios.interceptors.response.use
方法注册了一个响应拦截器。response
参数是响应对象,可以在这里对响应进行处理。error
参数是响应错误对象,我们可以在这里处理响应错误。
3. 错误处理
对于请求错误和响应错误,我们可以在拦截器中进行统一的错误处理。在上面的代码示例中,我们使用Promise.reject
方法返回了一个rejected状态的Promise对象,这样可以在调用请求的地方使用.catch
方法来捕获错误并进行处理。
axios.get('/api/user')
.then((response) => {
// 处理正常返回的数据
console.log(response);
})
.catch((error) => {
// 处理错误信息
console.error(error);
});
上面的代码中,我们通过.catch
方法捕获请求错误和响应错误,并进行处理。
4. 完整示例
下面是一个完整的示例,展示了如何使用axios拦截器来拦截请求错误和响应错误。
// 请求拦截器
axios.interceptors.request.use(
(config) => {
// 在发送请求之前做些什么
// 添加公共参数
config.params = {
...config.params,
token: 'your_token',
};
// 设置请求头
config.headers['Content-Type'] = 'application/json';
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
axios.interceptors.response.use(
(response) => {
// 对响应数据做些什么
// 根据业务需求进行处理
if (response.data.code !== 200) {
// 返回错误信息
return Promise.reject(response.data.message);
}
return response.data;
},
(error) => {
// 对响应错误做些什么
return Promise.reject(error);
}
);
// 发送请求
axios.get('/api/user')
.then((response) => {
// 处理正常返回的数据
console.log(response);
})
.catch((error) => {
// 处理错误信息
console.error(error);
});