Vue 拦截器原理和详细使用

article/2025/3/16 5:07:05

拦截器原理和作用

  • 首先拦截器在src/utils/request.js 文件中,拦截器分为请求拦截器和响应拦截器。

  • 页面中的每一个请求都会经过请求拦截和响应拦截,所以一般在这个文件进行操作。

  • 这一文件一般引入axios,vuex,Message,router 和相关方法 ,基地址+拦截器。

  • 请求拦截器:Token的主动处理 给每一个请求添加请求头token 对请求异常抛出。

  • 响应拦截器:简化axios默认加了一层的data Token被动处理 对请求异常抛出。


最简化版本

// 导入axios
import axios from 'axios'// 基地址
const service = axios.create({baseURL: process.env.VUE_APP_BASE_API,// 5秒超时timeout: 10000
})// 请求拦截
request.interceptors.request.use(config => {return config},error => {return Promise.reject(error)}
)// 响应拦截
request.interceptors.response.use(res => {return res},// 响应错误的代码写这里error => {return Promise.reject(error)}
)// 暴露副本
export default service

下面是实际开发中使用

注意:

当我们使用axios时候,他会给我们默认加一层data。这样我们取数据的时候就会比较增加无效代码,所以我们可以在数据响应的时候判断,给他人为的去掉一层,如下面判断 return data ,这样就可以直接res.data.变量

还有一个是token 处理 这里包含了主动处理:登录时候存一个时间,判断这个时间,超过就调用登出方法,提示信息,打回到登录页。被动处理:异常的时候判断一下,如果是和后端规定好的token过期状态码(比如401),就调用登出方法,提示信息,打回到登录页。

基地址最好不要写死写变量名,这样我们就可以通过改环境文件快速更改地址。

// 导入axios
import axios from 'axios'
// 导入提示信息
import { Message } from 'element-ui'
// 导入vuex
import store from '@/store'
// 导入路由
import router from '@/router'
// 导入获取时间和token的工具函数
import { getToken, getTokenTime } from '@/utils/auth'// 基地址
const service = axios.create({baseURL: process.env.VUE_APP_BASE_API,// 5秒超时timeout: 10000
})
// 请求拦截
// 添加一个service的请求拦截器
service.interceptors.request.use(async config => {// config就是本次发请求的信息// 判断有没有tokenif (store.state.user.token) {// token失效的主动处理// 获取一下记录token的时间let start = getTokenTime()// 获取一下当前时间let now = Date.now()// 算出时间差let hour = (now - start) / 1000 / 3600// 判断是否超过1小时if (hour >= 1) {// 代表token过期await store.dispatch('user/logout')Message.error('token已过期,请重新登录')router.push('/login')// return代表不往下执行,所以这个请求不会发送return}config.headers.Authorization = 'Bearer ' + getToken()config.headers['Bearer'] = getToken()// config.headers.tenantid =  getTenantId ()}// 发送请求return config},error => {return Promise.reject(error)}
)
// 响应拦截
service.interceptors.response.use(res => {// axios默认加了一层data// 这个res包括这个请求响应回来的所有信息// 所有的接口请求都会回到这里// 获取到本次请求得到的数据const data = res.data// 会帮所有的请求打印// console.log(data);// 判断本次请求是否成功if (data.code === 200 || data.code == 0) {// 如果响应成功,则正常给他返回数据return data} else {// 证明失败,我们需要让外面的catch被调用// 要让catch被调用,就要手动抛出一个错误,并把服务器返回的消息抛回去Message.warning(data.message || data.msg)return Promise.reject(data.message)}},async error => {// token失效的被动处理console.log(error)if (error.response.data.code === 401) {await store.dispatch('user/logout')Message.warning('登录状态过期,请重新登录!')router.push('/login')} else {return Promise.reject(error)}}// error => {//   return Promise.reject(error)// }
)
// 暴露副本
export default service

浏览器存取

img


总结:

经过这一趟流程下来相信你也对 Vue 拦截器原理和详细使用 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕


http://chatgpt.dhexx.cn/article/rgujePuc.shtml

相关文章

MATLAB学习笔记:定积分与广义积分

计算定积分和广义积分的命令int调用格式: 一元函数定积分: int(f(x),a,b) 二元函数定积分: int(f(x,y),x,a,b) >> syms x; >> fsin(x); >> sint(f,0,pi) s 2 >> syms x; >> fabs(x-1); >> sint(f,0,2)…

3.利用matlab计算不定积分和定积分(matlab程序 )

1.简述 不定积分 首先,通过符号变量创建一个符号函数,然后调用积分命令来计算函数的积分,示例如下: 注意:matlab中计算的不定积分结果中没有写上常数C,读者需要自己在使用的时候记得加上常数部分。 通常情…

matlab 自带定积分,Matlab怎么计算定积分,划重点了

在生活或研究中可能会遇到需要积分运算的情况,比如计算一个不规则图形的面积等等。matlab有很强的数据处理能力,只要给出任意可积的函数和积分上下线,用它可以进行积分运算。具体操作如下: 工具/材料 matlab软件 操作方法 01 以f(…

MATLAB基础教程(7)——求解定积分和不定积分

目录 定积分的基本概念 什么是定积分? 如何深入的理解定积分? 如何计算定积分? 在matlab中计算定积分。 不定积分 在matlab中计算不定积分 在matlab中计算定积分 本期回顾 定积分的基本概念 什么是定积分? 简而言之,我…

[转载]Matlab定积分近似计算

目标:加深理解积分理论中分割、近似、求和、取极限的思想方法,了解定积分近似计算的矩形法、梯形法与抛物线法,会用MATLAB语言编写求定积分近似值的程序,会用MALAB中的命令求定积分。 预备知识 在许多实际问题中,常常…

matlab近似计算求积分,matlab定积分的近似计算.ppt

matlab定积分的近似计算.ppt MATLAB数学建模与仿真 定积分的近似计算 2 定积分计算的基本公式是牛顿 莱布尼兹公式 但当被积函数的原函数不知道时 如何计算 这时就需要利用近似计算 特别是在许多实际应用中 被积函数甚至没有解析表达式 而是一条实验记录曲线 或一组离散的采样…

【Matlab】求解积分问题

求解积分问题 不定积分inf函数调用实例1实例2 定积分与无穷积分实例1实例2 多重积分 不定积分 inf函数调用 Finf(fun,x)fun是被积函数,是自变量, 当然如果只有一个自变量可以省略。 实例1 f ( x 2 1 ) 2 f {\left( {{x^2} 1} \right)^2} f(x21)2 …

matlab定积分怎么输入,Matlab计算定积分的操作内容讲解

许多伙伴还不晓得Matlab计算定积分的操作,而下面笔者就分享了Matlab计算定积分的操作内容,希望有需要的朋友都来共同学习哦。 打开Matlab,找到Matlab的命令窗口,点击进入,如图,当然也可以编辑脚本然后通过运…

关于用MATLAB求解定积分方程的问题

关于用MATLAB求解定积分方程的问题 Matlab论坛的总结帖: MATLAB中文论坛常见问题归纳-技术专栏-MATLAB中文论坛 帖子里面也有包含对于matlab中常用积分求解的介绍。 关于用matlab求解积分方程的问题,现在比较流行的是符号求解的方法。 对于积分方程的…

MATLAB新手简明使用教程(六)——使用matlab求解定积分和不定积分的问题——新手来看,保证看懂。

前期回顾 上期的教程虽然简短,但还是有点东西的,上一节中,我们学习了下面的知识点。 在matlab中定义矩阵:A [1 2 3; 2 3 4; 3 4 5],每行元素空格隔开,两行之间使用分号隔开。线性代数矩阵乘法运算、求解…

给div赋html,jquery怎么给div赋值

jquery给div赋值的方法:首先创建addtext函数;然后在函数内通过id(mydiv)获取div对象;最后使用text方法给div赋值即可,如【function addtext(){$(#mydiv).text(xx)}】。 环境: 本文适用于所有品牌的电脑。 (学习视频分享…

jQuery数据赋值解析

作者:Jiang, Jinlin 在我们使用jQuery中,会用到$(element).data()方法存取赋值到元素上的数据。通过该方法,我们每次通过selector获取该元素时,总能获取其赋值的数据。今天,我们就来看看jQuery是如何实现的。 首先,我们先从data方法看起: data方法接受两种参数形式,第…

给div赋值 html,jquery给div赋值的示例

jquery给div赋值的示例 发布时间:2020-11-30 11:44:03 来源:亿速云 阅读:120 作者:小新 小编给大家分享一下jquery给div赋值的示例,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!j…

jQuery取值和赋值的基本方法

一、.html() 获取集合中第一个匹配元素的HTML内容,也可以往匹配到的元素中写入内容。 如果写入的内容为标签,会被解析到页面中。 二、.text() 得到匹配元素集合中每个元素的合并文本,包括他们的后代 写入的标签不会被页面解析 三、.size() 返回的jQu…

Lora协议整理(第2汇报)

帧结构: 详细帧结构: 抓到的数据: LoraServer的搭建: 关于开源的lorawan server目前比较火的是brocaar的go语言版本的 https://github.com/brocaar/loraserver 另一个是gotthardp 的erlang语言的 https://github.com/gotth…

LoRaWAN与LoRa的区别!

LoRaWAN与LoRa的区别 在物联网技术快速发展的今天,NB-IoT、LoRa、SigFox等技术名词经常进入我们的视野中,对于刚刚接触物联网领域的人来说,在一大堆名词面前可能会混淆。面对类似于LoRa和LoRaWAN这样容易混淆的名词,其实只要系统…

Lora通信应用开发

概述: 1.了解Lora技术的基本知识 2.了解通信协议用途 3.掌握Lora模块SPI配置方法 4.掌握简单的Lora模块数据对传方法 5.掌握Lora通讯协议使用方法 一、什么是LoRa LoRa(Long Range Radio,远距离无线电)是一种基于扩频技术的…

常用的LoRa网络结构

LoRa应用中组网方式非常多,且很多供应商根据需求制定了相应的协议(网络层和应用层),根据是否支持LoRaWAN协议可以分为LoRaWAN协议网络和私有协议网络两大类。在中国的LoRa生态中有大量的用户使用私有协议,而在欧美等发达国家的LoRa市场上绝大…

【ESP32最全学习笔记(协议篇)——2.ESP32 LoRa】

关于本教程: ESP32 基础篇 1.ESP32简介 2.ESP32 Arduino 集成开发环境 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 6.ESP32 脉宽调制 7.ESP32 模拟输…

LoRa是什么

LoRa是什么 LoRa是什么LoRa调制LoRa调制参数LoRa WAN 网络LoRa技术框图LoRa WAN网络组成LoRa终端设备划分成A/B/C三类 LoRa是什么 LoRa 是LPWAN通信技术中的一种 LoRa 是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案 LoRa调制 LoRa 采用 CSS线性扩频…