【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>

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

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

相关文章

《业务流程--穿越从概念到实践的丛林》读后感一:什么是业务流程

2、分类法 分类法并不强调流程的横向分段和纵向分段的结构化关系&#xff0c;只是提供了一个流程分类分级的层级结构&#xff0c;让用户可以将一个个离散的流程装进这个分类框架里&#xff0c; 这种思路的代表是APQC PCF. APQC分类方法的第一层级就是企业价值链模型&#xff0c…

4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…

MySQL数据集成到广东省追溯平台的销售信息同步方案

销售信息同步--外购上报流程2&#xff1a;MySQL数据集成到广东省特殊食品电子追溯平台 在现代数据驱动的业务环境中&#xff0c;确保销售信息的准确性和及时性至关重要。本文将分享一个具体的技术案例&#xff0c;展示如何通过轻易云数据集成平台&#xff0c;将MySQL中的销售信…

Nginx配置https(Ubuntu、Debian、Linux、麒麟)

Ubuntu操作系统&#xff0c;Debian系统底层是Ubuntu&#xff0c;差异不大 ubuntu 安装nginx 1.安装依赖 sudo apt-get update sudo apt-get install gcc sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install zlib1g zlib1g-dev sudo apt-get install openssl lib…

【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组&#xff0c;如果存在 target 则返回数组的下标&#xff0c;否则返回 -1&#xff1b; 时间复杂度 O(N)&#xff0c;因为没有利用数组有序的特点&#xff0c;每次比较只能舍弃一个要比较的数&…

Linux镜像文件制作

本文介绍Linux镜像文件制作。 嵌入式系统开发调试及量产需要涉及到Linux镜像文件的制作&#xff0c;本文结合一个实例简要介绍Linux镜像文件的制作。 1.确定磁盘空间布局 在制作镜像文件之前应提前确定好磁盘空间布局&#xff0c;也就是地址空间划分&#xff0c;如这里的磁盘…

时频转换 | Matlab格拉姆角和场Gramian angular summation field一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab格拉姆角和场Gramian angular summation field一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x x(1:5120); % 本数据只选择5120个点进行分析 fs 6400 ; % 数据采样频…

vue3 vite ts day1

创建项目&#xff1a; npm init vitelatest 来创建项目 第二布&#xff1a; y 第三步&#xff1a;project name &#xff1a;项目名称 第四步&#xff1a;select a framework 选择框架 熟悉那种选择那种&#xff0c;当前选择vue 第五步&#xff1a;select a variant&…

elasticsearch-7.14.0集群部署+kibana

1、修改系统参数 用户对软件的内存和硬盘使用权限 vim /etc/security/limits.conf * soft nproc 655350 * soft nofile 655350 * hard nproc 655350 * hard nofile 655350修改最大线程数 vim /etc/sysctl.conf vm.max_map_count262144配置用户最大的线程数 vim /etc/security/…

深度学习 | pytorch + torchvision + python 版本对应及环境安装

Hi&#xff0c;大家好&#xff0c;我是半亩花海。要让一个基于 torch 框架开发的深度学习模型正确运行起来&#xff0c;配置环境是个重要的问题&#xff0c;本文介绍了 pytorch、torchvision、torchaudio 及 python 的对应版本以及环境安装的相关流程。 目录 一、版本对应 二…

如何学习游戏外挂编程

学习游戏外挂编程需要掌握一定的编程基础和相关知识。以下是一些学习游戏外挂编程的步骤和建议&#xff1a; 学习编程基础&#xff1a;首先&#xff0c;你需要学习一种编程语言&#xff0c;比如C或者Python。了解基本的编程概念&#xff0c;如变量、函数、循环和条件语句等。这…

LearnOpenGL学习(高级OpenGL -- 深度测试,模板测试,)

深度测试 深度缓冲用来防止被阻挡的面渲染到其他面的前面&#xff0c;深度缓冲就像颜色缓冲&#xff0c;在每个片段中储存了信息&#xff0c; 当深度测试(Depth Testing)被启用的时候&#xff0c;OpenGL会将一个片段的深度值与深度缓冲的内容进行对比。OpenGL会执行一个深度测…

MYSQL REPLACE INTO, INSERT IGNORE ON DUPLICATE 区别:

REPLACE INTO 不存在插入&#xff0c;存在删除旧的数据&#xff0c;插入一条新数据&#xff0c;返回新插入的自动编号&#xff1a; replace into&#xff1a;和 ignore 以及 duplicate 截然不同&#xff0c;不存在插入&#xff0c;存在则删除旧的&#xff0c;插入新的。不会保…

4. 设计模式分类

4.1 创建型模式 这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。 序 号 类 型 业务场景 实现要点 1 工 厂 方 法 多种类型商品不同接口,统一发奖服 务搭建场景 定义一个创建对象的接口,让其子类自 己决定实例化哪一个工厂类,工厂模式 使其创建过程延迟…

【JS】一些奇怪的野生方法(持续更新...)

文章目录 一、样式类二、API类三、一些属性四、一些奇怪但常用的功能 一、样式类 屏幕的可用高度&#xff1a;window.screen.availHeight 二、API类 获取绝对值&#xff1a;Math.abs(aaa)stopPropagation()&#xff1a;阻止事件在DOM树中继续冒泡&#xff08;就是停止事件&a…

Java 反射:强大而灵活的魔法工具

一、什么是 Java 反射 Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性。反射的本质是得到 Class 对象后&#xff0c;反向获取 Class 对象的各…

3大模块助力学生会视频自动评审系统升级

一、项目背景 传统的学生会视频作品或电子申请材料评审由老师线下逐一面审完成。面对大量学生提交的作品&#xff0c;评审效率低、耗时长&#xff0c;且主观性较强。为此&#xff0c;客户希望开发一个基于AI的线上自动面审系统&#xff0c;从语法正确性、演讲流利度和发音准确…

8. 一分钟读懂“代理模式”

8.1 模式介绍 代理模式是一种结构型设计模式&#xff0c;它通过提供一个代理对象来替代对另一个对象&#xff08;真实对象&#xff09;的访问。代理对象与真实对象实现相同的接口&#xff0c;并通过代理类对真实对象的访问进行控制&#xff0c;可以在调用前后执行附加操作&…

计算机网络学习资料全攻略

计算机网络是计算机科学中一个非常重要的分支&#xff0c;它涉及到数据在计算机系统之间的传输和通信。随着互联网的快速发展&#xff0c;对计算机网络知识的掌握变得越来越重要。本文将为您提供一份全面的计算机网络学习资料指南&#xff0c;帮助您从基础到高级逐步深入学习。…

<component> 标签 动态响应无法实现

【无法解决的问题&#xff0c;尤其是前端&#xff0c;多看官方文档&#xff0c;先查博文再看文档】 如果在 <component> 标签上使用 v-model&#xff0c;模板编译器会将其扩展为 modelValue prop 和 update:modelValue 事件监听器&#xff0c;就像对任何其他组件一样。但…