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

相关推荐
我不介意孤独20 小时前
面向华为昇腾 NPU 的企业级 PaddleOCR 推理服务,支持多卡多实例动态扩缩容、高召回 OCR 与生产级部署。
服务器·华为·ocr
scott.cgi21 小时前
Unity直接编译Java文件作为插件,导致失败的两个打包设置
java·unity·unity调用java·unity的java文件·unity的android插件·unity调用android·unity加载java代码
KaMeidebaby1 天前
卡梅德生物技术快报|骆驼纳米抗体:从原核表达、高通量测序到分子对接全流程实现
前端·数据库·其他·百度·新浪微博
澈2071 天前
C++并查集:高效解决连通性问题
java·c++·算法
子兮曰1 天前
Node.js v26.1.0 深度解读:FFI、后量子密码与调试器的进化
前端·后端·node.js
测试员周周1 天前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
2401_873479401 天前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
uiop_uiop_uiop1 天前
fnOS LUKS on RAID Storage Pool
服务器
ShiJiuD6668889991 天前
大事件板块一
java