【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实例,并传递了一些配置选项,例如baseURL
和timeout
。
三、设置请求拦截器
请求拦截器允许你在请求发送之前对请求进行处理。你可以在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请求拦截器
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

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

【Android】从事件分发开始:原理解析如何解决滑动冲突
【Android】从事件分发开始:原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始:原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争,滑动冲突…...
如何使用JDBC向数据库中插入日期数据???
在学习JDBC 的过程中很多小明有疑问在IDEA编辑器是如何插入一个日期类型的数据的,此篇一些方法希望可以帮助到你。 示例: import java.text.ParseException; import java.text.SimpleDateFormat; import java.sql.Date; import java.util.Scanner;publi…...

高频面试题(含笔试高频算法整理)基本总结回顾29
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
Flink日志配置
所有Flink进程都会创建一个日志文本文件,其中包含进程中发生的各种事件的消息。这些日志可以深入了解Flink的内部工作原理,还可以用来检测问题(以警告/错误信息的形式),并帮助调试。 可以通过web界面的JobManager/TaskManager页面访问日志文件。使用的资源提供者(例如YA…...

论文 | EfficientRAG: Efficient Retriever for Multi-Hop Question Answering
1. 论文介绍与研究动机 本文提出了一个新的检索增强生成(RAG)方法——EfficientRAG,它专门用于解决复杂的多跳问题。在多跳问答中,问题的答案需要从多个信息源中检索并结合起来,远比单跳问题复杂,因此也更加…...

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

手机LCD分区刷新技术介绍
分区刷新也称为分区变频,LCD分区刷新功能的目的是将屏幕分为上下半区,分区显示不同帧率,上方区块High Frame Rate,下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上,显示…...
WPF软件花屏的解决方法
Win10操作系统更新后,软件花屏了! WPF为啥还能出现花屏呢? 花屏是个什么现象? 即:WPF的界面不能正确渲染或及时刷新,导致整个界面会出现严重的残影,严重影响使用。 如果存在花屏,…...

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

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

项目基于oshi库快速搭建一个cpu监控面板
后端: <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*的指针类型,其使用方法如下: 上面我们是先将字符使用一个变量,然后将变量的地址传给一个字符指针变量,通过指针变 量实现了对这个字符的打印。还有下面的这种…...

【开源】A063—基于Spring Boot的农产品直卖平台的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...

Can‘t find variable: token(token is not defined)
文章目录 例子 1:使用 var例子 2:使用 let 或 const例子 3:异步操作你的代码中的情况 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 是一种服务器端脚本语言,能够生成动态网页内容。它可以根据用户的请求、数据库中的数据等因素,实时地生成 HTML 页面返回给客户端浏览器。而 MySQL 是一个流行的关系型数据库管理系统…...
深入浅出:PHP中的变量与常量全解析
文章目录 引言理解变量普通变量赋值操作变量间赋值引用赋值取消引用 可变变量预定义变量 理解常量声明常量使用define()函数const关键字 使用常量预定义常量 扩展话题:作用域与生命周期实战案例总结与展望参考资料 引言 在编程的世界里,变量和常量是两种…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...