当前位置: 首页 > news >正文

【Axios】如何在Vue中使用Axios请求拦截器

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,云原生开发,前后端框架,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S集群搭建与管理,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:前端零基础,实战进阶教学
景天的主页:景天科技苑

Vue中Axios拦截器

在Vue项目中,Axios是一个非常流行的HTTP客户端,用于发送请求和接收响应。Axios拦截器是Axios的一个强大功能,它允许你在请求发送之前和响应返回之后对请求和响应进行处理和拦截。通过拦截器,你可以添加请求头、处理请求参数、处理错误等。本文将结合实际案例,详细介绍如何在Vue中使用Axios拦截器。

一、安装Axios

首先,你需要在Vue3项目中安装Axios。你可以使用npm或yarn等包管理工具进行安装。

npm install axios

或者

yarn add axios

二、创建Axios实例

在Vue3项目中,通常会在项目的某个地方创建一个Axios实例,并对其进行配置。你可以将Axios实例放在一个单独的文件中,例如src/axios.js

// src/axios.js
import axios from 'axios';// 创建Axios实例
const axiosInstance = axios.create({baseURL: '// 你的基础URL', // 设置请求的baseURLtimeout: 5000, // 设置请求超时时间
});// 导出Axios实例
export default axiosInstance;

在上面的代码中,我们使用axios.create方法创建了一个Axios实例,并传递了一些配置选项,例如baseURLtimeout

三、设置请求拦截器

请求拦截器允许你在请求发送之前对请求进行处理。你可以在Axios实例中使用interceptors.request.use方法来添加请求拦截器。

// src/axios.js
import axios from 'axios';// 创建Axios实例
const axiosInstance = axios.create({baseURL: '// 你的基础URL',timeout: 5000,
});// 添加请求拦截器
axiosInstance.interceptors.request.use((config) => {// 在发送请求之前做些什么// 例如,添加请求头const token = localStorage.getItem('token');if (token) {config.headers['Authorization'] = `Bearer ${token}`;}// 处理请求参数// config.params = {//   ...config.params,//   key: 'value',// };return config;},(error) => {// 对请求错误做些什么return Promise.reject(error);}
);// 导出Axios实例
export default axiosInstance;

在上面的代码中,我们添加了一个请求拦截器。在拦截器中,我们检查本地存储中是否存在token,如果存在,则将其添加到请求头中。你还可以对请求参数进行处理,例如添加或修改参数。

四、设置响应拦截器

响应拦截器允许你在响应返回之后对响应进行处理。你可以在Axios实例中使用interceptors.response.use方法来添加响应拦截器。

// src/axios.js
import axios from 'axios';// 创建Axios实例
const axiosInstance = axios.create({baseURL: '// 你的基础URL',timeout: 5000,
});// 添加请求拦截器(同上)// 添加响应拦截器
axiosInstance.interceptors.response.use((response) => {// 对响应数据做些什么// 例如,处理响应数据格式// response.data = {//   ...response.data,//   key: 'value',// };return response;},(error) => {// 对响应错误做些什么const { response } = error;if (response) {// 判断错误状态码if (response.status === 400) {// 请求错误} else if (response.status === 401) {// 未授权,请重新登录} else if (response.status === 403) {// 拒绝访问(403)}return Promise.reject(response.data);} else {console.error('网络连接异常,请稍后再试!');}}
);// 导出Axios实例
export default axiosInstance;

在上面的代码中,我们添加了一个响应拦截器。在拦截器中,我们可以对响应数据进行处理,例如修改数据格式。我们还可以根据响应的状态码来处理不同的错误情况。

五、在Vue组件中使用Axios实例

现在,我们已经在项目中创建了Axios实例,并添加了请求和响应拦截器。接下来,我们可以在Vue组件中使用这个Axios实例来发送请求。

<!-- src/components/YourComponent.vue -->
<template><div>数据展示</div>
</template><script>
import axiosInstance from '../axios';export default {name: 'YourComponent',mounted() {axiosInstance.get('/your-endpoint').then(data => {console.log(data);}).catch(error => {console.error('错误:', error);});},
};
</script>

在上面的代码中,我们在Vue组件的mounted生命周期钩子中使用了Axios实例来发送一个GET请求。请求成功后,我们将响应数据打印到控制台。如果请求失败,我们将错误信息打印到控制台。

六、封装请求方法

为了更方便地在项目中发送请求,我们可以将常用的请求方法封装起来。例如,我们可以封装GET和POST请求方法。

// src/api/axios.js
import axios from 'axios';// 创建Axios实例(同上)// 封装GET请求方法
export function getRequest(url, params = {}) {return axiosInstance.get(url, { params });
}// 封装POST请求方法
export function postRequest(url, data = {}) {return axiosInstance.post(url, data);
}

现在,我们可以在Vue组件中使用封装好的请求方法来发送请求。

<!-- src/components/YourComponent.vue -->
<template><div>数据展示</div>
</template><script>
import { getRequest, postRequest } from '../api/axios';export default {name: 'YourComponent',mounted() {// 使用GET请求方法getRequest('/your-get-endpoint', { param1: 'value1' }).then(data => {console.log('GET请求响应:', data);}).catch(error => {console.error('GET请求错误:', error);});// 使用POST请求方法postRequest('/your-post-endpoint', { key: 'value' }).then(data => {console.log('POST请求响应:', data);}).catch(error => {console.error('POST请求错误:', error);});},
};
</script>

七、统一管理API接口

在项目中,我们可能会有很多API接口。为了方便管理和维护,我们可以将这些接口统一管理起来。例如,我们可以在src/api目录下创建一个api.js文件,并在其中定义所有的API接口。

// src/api/api.js
import { getRequest, postRequest } from './axios';// 定义用户相关API接口
export class UserApi {static async login(params) {return postRequest('/login', params);}static async register(params) {return postRequest('/register', params);}static async getUserInfo(params) {return getRequest('/userInfo', params);}
}// 定义书籍相关API接口
export class BookApi {static async getBookList(params) {return getRequest('/bookList', params);}
}

现在,我们可以在Vue组件中使用统一管理好的API接口来发送请求。

<!-- src/components/YourComponent.vue -->
<template><div><button @click="handleLogin">登录</button></div>
</template><script>
import { UserApi } from '../api/api';export default {name: 'YourComponent',methods: {async handleLogin() {const params = {username: 'admin',password: '123456',};try {const response = await UserApi.login(params);console.log('登录成功:', response);} catch (error) {console.error('登录失败:', error);}},},
};
</script>

相关文章:

【Axios】如何在Vue中使用Axios请求拦截器

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

element Plus中 el-table表头宽度自适应,不换行

在工作中&#xff0c;使用el-table表格进行开发后&#xff0c;遇到了小屏幕显示器上显示表头文字会出现换行展示&#xff0c;比较影响美观&#xff0c;因此需要让表头的宽度变为不换行&#xff0c;且由内容自动撑开。 以下是作为工作记录&#xff0c;用于demo演示教程 先贴个…...

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争&#xff0c;滑动冲突…...

如何使用JDBC向数据库中插入日期数据???

在学习JDBC 的过程中很多小明有疑问在IDEA编辑器是如何插入一个日期类型的数据的&#xff0c;此篇一些方法希望可以帮助到你。 示例&#xff1a; import java.text.ParseException; import java.text.SimpleDateFormat; import java.sql.Date; import java.util.Scanner;publi…...

高频面试题(含笔试高频算法整理)基本总结回顾29

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

Flink日志配置

所有Flink进程都会创建一个日志文本文件,其中包含进程中发生的各种事件的消息。这些日志可以深入了解Flink的内部工作原理,还可以用来检测问题(以警告/错误信息的形式),并帮助调试。 可以通过web界面的JobManager/TaskManager页面访问日志文件。使用的资源提供者(例如YA…...

论文 | EfficientRAG: Efficient Retriever for Multi-Hop Question Answering

1. 论文介绍与研究动机 本文提出了一个新的检索增强生成&#xff08;RAG&#xff09;方法——EfficientRAG&#xff0c;它专门用于解决复杂的多跳问题。在多跳问答中&#xff0c;问题的答案需要从多个信息源中检索并结合起来&#xff0c;远比单跳问题复杂&#xff0c;因此也更加…...

超越Hallo和AniPortrait?音频驱动肖像动画新方法LetsTalk

之前的文章中已经给大家介绍过许多关于音频驱动的肖像图像生成动画方法&#xff0c;感兴趣的小伙伴可以点击下面链接阅读~ 复旦开源Hallo&#xff1a;只需输入一段音频和一张照片就可以让人物说话。 开源EMO再升级&#xff01;复旦|百度|南大推出Hallo2&#xff1a;可以生成4…...

手机LCD分区刷新技术介绍

分区刷新也称为分区变频&#xff0c;LCD分区刷新功能的目的是将屏幕分为上下半区&#xff0c;分区显示不同帧率&#xff0c;上方区块High Frame Rate&#xff0c;下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上&#xff0c;显示…...

WPF软件花屏的解决方法

Win10操作系统更新后&#xff0c;软件花屏了&#xff01; WPF为啥还能出现花屏呢&#xff1f; 花屏是个什么现象&#xff1f; 即&#xff1a;WPF的界面不能正确渲染或及时刷新&#xff0c;导致整个界面会出现严重的残影&#xff0c;严重影响使用。 如果存在花屏&#xff0c…...

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术&#xff1a;蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝&#xff08;Unstructur…...

开发手札:Win+Mac下工程多开联调

最近完成一个Windows/Android/IOS三端多人网络协同项目V1.0版本&#xff0c;进入测试流程了。为了方便自测&#xff0c;需要用unity将一个工程打开多次&#xff0c;分别是Win/IOS/Android版本&#xff0c;进行多角色联调。 在Win开发机上&#xff0c;以Windows版本为主版…...

项目基于oshi库快速搭建一个cpu监控面板

后端&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-…...

【c语言】指针3

1、字符指针变量 指针类型中我们知道有一种为字符指针char*的指针类型&#xff0c;其使用方法如下&#xff1a; 上面我们是先将字符使用一个变量&#xff0c;然后将变量的地址传给一个字符指针变量&#xff0c;通过指针变 量实现了对这个字符的打印。还有下面的这种…...

【开源】A063—基于Spring Boot的农产品直卖平台的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

Can‘t find variable: token(token is not defined)

文章目录 例子 1&#xff1a;使用 var例子 2&#xff1a;使用 let 或 const例子 3&#xff1a;异步操作你的代码中的情况 Cant find variable: tokentoken is not defined源代码 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: tr…...

【JavaEE 初阶】⽹络编程套接字

一、⽹络编程基础 1.应用层 操作系统提供的一组 api >socket api(传输层给应用层提供) 2.传输层 两个核心协议. TCPUDP 差别非常大,编写代码的时候,也是不同的风格 因此, socket api 提供了两套 TCP 有连接, 可靠传输, 面向字节流, 全双工 UDP …...

【Linux内核】Hello word程序

创建测试目录 mkdir -p ~/develop/kernel/hello-1 cd ~/develop/kernel/hello-1 创建MakeFile文件和内核.c文件 nano Makefile nano hello-1.c 编写内容 /* * hello-1.c - The simplest kernel module. */ #include <linux/module.h> /* Needed by all modules */…...

PHP 与 MySQL 搭配的优势

一、PHP 与 MySQL 搭配的优势 强大的动态网页开发能力 PHP 是一种服务器端脚本语言&#xff0c;能够生成动态网页内容。它可以根据用户的请求、数据库中的数据等因素&#xff0c;实时地生成 HTML 页面返回给客户端浏览器。而 MySQL 是一个流行的关系型数据库管理系统&#xf…...

深入浅出:PHP中的变量与常量全解析

文章目录 引言理解变量普通变量赋值操作变量间赋值引用赋值取消引用 可变变量预定义变量 理解常量声明常量使用define()函数const关键字 使用常量预定义常量 扩展话题&#xff1a;作用域与生命周期实战案例总结与展望参考资料 引言 在编程的世界里&#xff0c;变量和常量是两种…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...