Axios 拦截器实战教程:简单易懂

news2024/11/26 18:40:45

Axios 提供了一种称为 “拦截器(interceptors)” 的功能,使我们能够在请求或响应被发送或处理之前对它们进行全局处理。拦截器为我们提供了一种简洁而强大的方式来转换请求和响应、进行错误处理、添加认证信息等操作。在本文中,我们将深入探讨如何使用 Axios 的拦截器,并提供一个实际案例来演示其用法。

Axios 拦截器的基本概念

在 Axios 中,拦截器是一个由两个部分组成的对象:请求拦截器(request interceptors)和响应拦截器(response interceptors)。这两种拦截器允许我们在请求发出之前和收到响应后对其进行预处理。

请求拦截器(request interceptors) 用于在请求被发送之前修改请求配置,或者在发送请求前进行一些操作,例如添加认证信息、设置请求头等。

响应拦截器(response interceptors) 用于在接收到响应数据之后进行处理,可以对响应数据进行转换、错误处理等操作。

Axios 拦截器是链式结构的,这意味着您可以同时使用多个拦截器,并且它们按照添加顺序依次执行。

下面是 Axios 中拦截器的基本用法:

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 对响应数据做些什么
    return response;
  },
  function (error) {
    // 对响应错误做些什么
    return Promise.reject(error);
  }
);

实践案例:使用 Axios 拦截器请求处理

让我们通过一个实际案例来演示 Axios 拦截器的用法。在这个案例中,我们将使用 Axios 发起一个 GET 请求,并在请求拦截器中添加一个基本的认证头,并在响应拦截器中处理返回的数据。

请求路径

为了便于测试,所以案例使用 Apifox 提供的开放 API 来测试,测试的 API 路径为:https://echo.apifox.com/get?q1=v1

案例代码

首先,确保您已经在项目中安装了 Axios:

npm install axios

现在,我们来编写实践案例代码:

// 导入 Axios 和你的 IDE 编辑器中的其他必要模块
const axios = require('axios');

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前添加认证头
    config.headers['Authorization'] = 'Bearer your_access_token';
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 对响应数据进行处理
    return response.data;
  },
  function (error) {
    // 对响应错误进行处理
    return Promise.reject(error);
  }
);

// 发起 GET 请求
axios.get('https://echo.apifox.com/get?q1=v1')
  .then((data) => {
    // 处理返回的数据
    console.log('请求成功,数据为:', data);
  })
  .catch((error) => {
    // 处理错误
    console.error('请求失败,错误为:', error);
  });

在这个案例中,我们在请求拦截器中添加了一个名为 "Authorization" 的认证头,并在响应拦截器中处理了返回的数据。

提示与注意事项

  1. 当添加多个拦截器时,确保它们的顺序是正确的,因为它们会按照添加的顺序依次执行。
  2. 在拦截器中,务必返回修改后的 config 对象或响应数据,否则可能会导致请求或响应失败。
  3. 谨慎使用拦截器,不要滥用,否则可能会导致代码难以维护和理解。

总结

Axios 的拦截器是一个强大的功能,使得我们能够在请求和响应阶段对数据进行全局处理。我们在本文中介绍了请求拦截器和响应拦截器的基本概念,并通过一个实践案例演示了如何使用 Axios 拦截器来处理基本路由与请求。拦截器为我们提供了更灵活、高效的方式来管理 HTTP 请求和响应,帮助我们在前端开发中更好地处理数据交互。

使用 Apifox 来 Mock 数据

Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。在后端人员写完服务接口时,测试阶段可以通过 Apifox 来校验接口的正确性,图形化界面极大的方便了项目的上线效率。

更为重要的是,Apifox 能够 Mock 数据,其集成了 Mock.js 库,允许你自定义规则,并且可以编写脚本,强大的 Mock 功能可以让前端开发人员不再苦苦等待后端提供接口,自己就能提前造各种各样的数据出来,可视化操作让你点点鼠标就能生成可观的人性化数据。

知识扩展:

  • Axios 中如何设置请求头(headers)
  • Axios 的 baseurl 怎么配置?深入剖析 Axios 的 baseURL 配置方法

参考链接:

  • Axios 官方文档:Interceptors | Axios Docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1296382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例063:基于微信小程序的传染病防控宣传系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder …

如何进行更好的面试回复之缓存函数在项目中的性能优化?

缓存函数是一种提高函数性能的技术,在函数被调用时,会将计算结果缓存起来,以便在后续的调用中直接返回缓存的结果,从而减少了重复计算的时间。 缓存函数的实现通常包括两个步骤: 判断缓存是否存在:在函数被…

Mysql 命令行导出SQL文件和导入文件

1-导出SQL文件 要导出 MySQL 数据库到一个 SQL 文件,你可以使用 mysqldump 工具,它是 MySQL 的一个命令行工具,以下是一些步骤: 打开终端,并使用以下命令来执行导出操作: mysqldump -u wqzbxh -h 1.137.15…

DAP数据集成与算法模型如何结合使用

企业信息化建设会越来越完善,越来越体系化,当今数据时代背景下更加强调、重视数据的价值,以数据说话,通过数据为企业提升渠道转化率、改善企业产品、实现精准运营,为企业打造自助模式的数据分析成果,以数据…

无人机巡山护林,林业无人机智能助力绿色守护

随着全球环保意识的不断提高,无人机巡山护林已经成为解决森林巡检难题的一种独特而高效的方式。在我国,各地正积极探索无人机在森林防火、病虫害监测以及生态调查等领域的创新应用。随着无人机技术的不断演进,其在推动森林保护和可持续发展方…

高性能和多级高可用,云原生数据库 GaiaDB 架构设计解析

1 云原生数据库和 GaiaDB 目前,云原生数据库已经被各行各业大规模投入到实际生产中,最终的目标都是「单机 分布式一体化」。但在演进路线上,当前主要有两个略有不同的路径。 一种是各大公有云厂商选择的优先保证上云兼容性的路线。它基于存…

工作上Redis安装及配置

下载redis软件 第一步:解压压缩包 tar -zxvf redis-7.0.14.tar.gz 第二步:移动redis存放目录(结合个人需求而定!) redis-7.0.14:解压后的文件路径 /usr/local:移动后的文件路径 mv redis-7.0.…

QT作业2

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

Flutter一直 Running Gradle task ‘assembleDebug‘

Flutter升级到3.13.7之后,一直Running Gradle task ‘assembleDebug’,之前运行还没问题。 试了各种方法,比如添加阿里云镜像,flutter\packages\flutter_tools\gradle目录下修改build.gradle.kts文件,都不行。 参考大佬…

WeLive开源在线客服系统源码 /PHP企业级在线客服聊天系统源码/支持移动+PC端+中英文双语自由切换

源码简介: WeLive开源在线客服系统源码 ,它作为企业级在线客服系统源码,可以支持移动PC端,中英文双语自由切换。 WeLive开源PHP在线客服系统源码 WeLive5是一个企业级的在线客服系统, 程序小巧使用简单。 WeLive5是一个企业级的…

UE4 在编辑器下进行打印 学习笔记

创建WidgetComponent 创建Blueprint Interface 创建接口名字 在WidgetComponent里面使用Tick调用才创建的接口 随便创建一个Actor 在BP里面使用这个接口 在这里搜索它调用 在这里就可以做对应的操作 把组件加到Actor上面 把这个Actor放入场景 就开始打印了

Navicat 技术指引 | 适用于 GaussDB 分布式的自动运行功能

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

视频剪辑:视频转码实用技巧,批量将MP4转为MP3音频

随着数字媒体设备的普及,视频和音频文件已成为日常生活中的重要组成部分。有时,可能要将MP4视频文件转换为MP3音频文件,以提取其中的音频内容或者进行其他处理。这是耗费时间的任务,那要如何操作呢?本文详解云炫AI智剪…

【已解决】SpringBoot Maven 打包失败:class lombok.javac.apt.LombokProcessor 错误

文章目录 出错原因解决办法总结 最新项目部署的时候&#xff0c;出现了一个maven打包失败的问题&#xff0c;主要是lombok这个组件出的问题&#xff0c;具体的错误信息如下&#xff1a; 我的lombok版本如下&#xff1a; <dependency><groupId>org.projectlombok&l…

【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】

文章目录 一、向量、矩阵范数与谱半径1、向量范数a. 定义及性质补充解释范数差 b. 常见的向量范数 l 1 l_1 l1​、 l 2 l_2 l2​、 l ∞ l_\infty l∞​ 范数性质关系 2、矩阵范数a. 矩阵的范数b. 常见的矩阵范数相容范数算子范数 3、谱半径4、知识点总结1. 向量范数2. 矩阵范数…

数字化转型怎么才能做成功?_光点科技

数字化转型对于现代企业来说是一场必要的革命。它不仅仅是技术的更迭&#xff0c;更是企业战略、文化和运营方式全面升级的体现。一个成功的数字化转型能够使企业更具竞争力、更灵活应对市场变化&#xff0c;并最终实现业务增长和效率提升。那么&#xff0c;数字化转型怎么才能…

vue 使用 h函数

我的项目前端使用的vben-admin框架。现在有个需求需要在列表中显示一个自定义链接 先贴出做成功的效果如下图。 在做之前通过咨询和搜索得知 可以用vue的h函数来返回一个dom。 那我就去看vue官网对于h函数的说明和示例&#xff0c;大致浏览了一页&#xff0c;感觉还是有点迷糊…

【GEE笔记】在线分类流程,标注样本点、分类和精度评价

GEE在线分类流程 介绍 GEE&#xff08;Google Earth Engine&#xff09;是一个强大的地理信息处理平台&#xff0c;可以实现在线的遥感影像分析和处理。本文将介绍如何使用GEE进行在线的分类流程&#xff0c;包括标注样本点、分类和精度评价。本文以2020年5月至8月的哨兵2影像…

MQTT协议对比TCP网络性能测试模拟弱网测试

MQTT正常外网压测数据---时延diff/ms如下图&#xff1a; MQTT弱网外网压测数据 TCP正常外网压测数据 TCP弱网外网压测数据 结论&#xff1a; 在弱网场景下&#xff0c;MQTT和TCP的网络性能表现会有所不同。下面是它们在弱网环境中的对比&#xff1a; 连接建立&#xff1a;M…

el-table 跨页多选

步骤一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…