深入了解 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 提供了许多其他配置选项和参数来进一步定制和控制请求和响应的行

相关推荐
测试界的海飞丝1 小时前
10道软件测试面试题及其答案:
服务器·测试工具·职场和发展
skywalk81631 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
J***Q2921 小时前
Vue数据可视化
前端·vue.js·信息可视化
S***26752 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)2 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
@游子2 小时前
内网渗透笔记-Day5
运维·服务器
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
Yawesh_best2 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
V***u4532 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
ttod_qzstudio3 小时前
深入理解 Vue 3 的 h 函数:构建动态 UI 的利器
前端·vue.js