深入了解 Axios 拦截器

深入了解 Axios 拦截器

本文将向您介绍什么是 Axios 拦截器以及如何使用它们。通过分步指南和示例代码,您将学习如何使用 Axios 拦截器来处理请求和响应,并添加授权和错误处理。

什么是 Axios 拦截器?

Axios 拦截器允许您在请求发送和响应接收过程中拦截、操作和修改它们。Axios 提供了两种类型的拦截器:请求拦截器和响应拦截器。

请求拦截器允许您在发送请求之前修改请求的配置或添加自定义的头部和标记。它们也可以用于添加身份验证和授权令牌,以确保只有经过身份验证的用户才能访问受保护的资源。

响应拦截器允许您在接收响应之前拦截和处理它们。它们可以用于处理响应错误和重定向,以及过滤或转换响应数据。

使用 Axios 拦截器

让我们以请求拦截器为例来学习如何使用 Axios 拦截器。在您的 JavaScript 文件中添加以下代码:

import axios from 'axios';

axios.interceptors.request.use(

config => {

const token = localStorage.getItem('authToken');

if (token) {

config.headers.Authorization = Bearer ${token};

}

return config;

},

error => {

return Promise.reject(error);

}

);

在上述代码中,我们使用 .interceptors 属性将请求拦截器添加到 Axios。.request.use() 方法接收两个函数参数:第一个函数在发送请求之前被调用,它接收一个 Axios 请求配置对象,并返回一个新的配置对象。在上述代码中,我们从本地存储中获取授权令牌,并把它添加到请求头中的 Authorization 标头中。

第二个函数是在请求发生错误时调用的。在这个例子中,我们简单地返回一个被拒绝的 Promise 对象,以便在链式调用中处理错误。

接下来,让我们学习如何使用响应拦截器。在您的 JavaScript 文件中添加以下代码:

axios.interceptors.response.use(

response => {

if (response.data && response.data.error_code) {

return Promise.reject(response.data);

}

return response;

},

error => {

if (error.response && error.response.status === 401) {

localStorage.removeItem('authToken');

window.location.href = '/login';

}

return Promise.reject(error.response.data);

}

);

在上述代码中,我们使用 .interceptors 属性将响应拦截器添加到 Axios。.response.use() 方法接收两个函数参数:第一个函数在成功响应时调用,它接收响应对象,并返回新的响应对象或 Promise 对象。在上述代码中,我们检查响应数据是否包含错误代码,如果是,我们就返回一个被拒绝的 Promise 对象。否则,我们将返回原始响应对象。

第二个函数在响应发生错误时调用。在这个例子中,我们检查响应状态码是否为 401(未经授权),如果是,我们就从本地存储中删除授权令牌,并重定向到登录页面。否则,我们返回响应数据的 Promise 对象,以便在链式调用中处理错误。

总结

通过本文,您学习了如何使用 Axios 拦截器来处理请求和响应,并添加授权和错误处理。您可以使用这些拦截器来添加自定义头部、标记、身份验证和授权令牌,并处理响应错误和重定向。Axios 提供了许多其他配置选项和参数来进一步定制和控制请求和响应的行

相关推荐
千寻girling几秒前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
南极企鹅2 分钟前
springBoot项目有几个端口
java·spring boot·后端
郝学胜-神的一滴6 分钟前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
清风拂山岗 明月照大江8 分钟前
Redis笔记汇总
java·redis·缓存
C澒10 分钟前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
Doro再努力18 分钟前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
xiaoxue..24 分钟前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
Lsir10110_38 分钟前
【Linux】进程信号(上半)
linux·运维·服务器
忧郁的Mr.Li41 分钟前
SpringBoot中实现多数据源配置
java·spring boot·后端
清山博客43 分钟前
OpenCV 人脸识别和比对工具
前端·webpack·node.js