Vue3项目准备:utils工具插件文件夹中封装request.js配置axios请求基地址及超时时间、请求拦截器、响应拦截器

token介绍

概念:访问权限的令牌,本质上是一串字符串

创建:正确登录后,由后端签发并返回

作用:判断是否有登录状态等,控制访问权限

注意:前端只能判断token有无,而后端才能判断token的有效性

通俗地讲,每个已经登录的用户都会有一个独一无二的token,这个token是用户访问除登录页之外的其他网页、向服务器发请求的一把“钥匙”,如果token为空(没有钥匙)或用户伪造了token(钥匙是假的)或者token已过期,那么就需要将用户“踢”回登录页,让用户登录之后再访问网页

axios请求基地址及超时时间

代码如下

const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
  // TODO 1. 基础地址,超时时间
  baseURL,
  timeout: 10000
})

代码解释

  1. baseURL: 这是用于设置请求的基础地址,即请求的 URL 会以该地址为基准进行拼接。例如,如果设置了 baseURL 为 "https://api.example.com",那么在发送请求时,拼接的 URL 会以该地址作为起点。这样可以避免在每个请求中都写入完整的 URL 地址。在示例中,baseURL 是一个变量,可能是在其他地方定义的。

  2. timeout: 这是用于设置请求的超时时间,单位为毫秒。如果请求在指定的时间内没有收到响应,那么该请求会被取消。在示例中,timeout 被设置为 10000 毫秒,即 10 秒。

axios请求拦截器

发起请求之前,触发的配置函数,对请求参数进行额外配置

举个例子,我们上面提到token是用户向服务器发请求的一把“钥匙”,那么用户发请求肯定需要在请求头携带token

那么我们可以在请求拦截器里把token配置到请求头里,这样每一个请求的请求头都会自动携带token,代码如下

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // TODO 2. 携带token
    const useStore = useUserStore()
    if (useStore.token) {
      config.headers.Authorization = useStore.token
    }
    return config
  },
  (err) => Promise.reject(err)
)

 代码解读

axios响应拦截器 

响应回到then/catch 之前,触发的拦截函数,对响应结果统一处理

一般来说,服务器响应对象res.data.code === 0(或者200)时为请求成功,其余情况为请求失败,请求失败时我们需要根据错误状态码进行相应的处理,比如处理业务失败时需要将响应的错误信息打印在屏幕上给用户看到,在用户token过期时我们需要把用户“踢”回登录页

而这些错误状态的处理,我们都可以在响应拦截器里进行配置,代码如下

// 响应拦截器
instance.interceptors.response.use(
  (res) => {
    // TODO 4. 摘取核心响应数据
    if (res.data.code === 0) {
      return res
    }
    // TODO 3. 处理业务失败
    // 处理业务失败, 给错误提示,抛出错误
    ElMessage.error(res.data.message || '服务异常')
    return Promise.reject(res.data)
  },
  (err) => {
    // TODO 5. 处理401错误
    // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录
    if (err.response?.status === 401) {
      router.push('/login')
    }

    // 错误的默认情况 => 只要给提示
    ElMessage.error(err.response.data.message || '服务异常')
    return Promise.reject(err)
  }
)

其中,返回的res就是then服务器响应对象,err就是catch服务器响应对象

你有可能会疑惑return Promise.reject(err)的作用,它的作用是抛出异常,中断程序。以用户登录为例,代码如下,注意一定要用await等待响应结果,否则响应还没返回下面三行代码就执行完了

现在想想,我之前的代码称之为“屎山代码”真的一点都不为过,由于之前一直不会请求拦截器和响应拦截器,所以我判断token是否过期的方法就是在每一个请求的后面加上一个判断,如果状态码时2001,代表token过期,“踢”回登录页

真的要被我自己蠢笑了

request.js文件的使用

由于request.js里封装了axios以及axios请求基地址、超时时间、请求拦截器、响应拦截器,所以我们在其他需要编写请求代码的文件中可以导入request.js,然后通过request.post(或者equest.get或者……)就可以发起请求啦

比如我在,src文件夹下新建api文件夹用来统一编写请求,在api文件夹下新建一个user.js用来编写用户信息相关的请求

如何使用这些请求呢?在需要的vue页面中导入使用就好啦

比如登录页面中的登录逻辑

//导入登录函数
import { userLoginService } from '@/api/user.js'

const Login = async () => {
    if (userName.value.trim() === '') {
        ElMessage.error('请填写用户名!')
        return
    } else if (password.value.trim() === '') {
        ElMessage.error('请填写密码!')
        return
    } else {
        const res = await userLoginService({
            username: userName.value,
            password: password.value
        })
        userStore.setToken(res.data.token)
        ElMessage.success('登录成功')
        router.push('/layout')
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Camtasia Studio2024永久免费版及最新版本功能讲解

在当前数字化时代,视频内容的制作与编辑变得愈发重要。无论是企业宣传、在线教育还是个人Vlog制作,一款功能强大且易于上手的视频编辑软件成为了刚需。Camtasia Studio作为市场上备受欢迎的视频编辑与屏幕录像工具,凭借其强大的功能与用户友好…

在线标注流程

文章目录 在线标注流程标注方法 在线标注流程 登录地址:http://7a27c5e078f644a2a9b734603913c65e.login.bce.baidu.com 出现页面: 登录名: 三个中任意一个 密码:ZNSJ123a 登录之后叉掉。再打开这个网站:https://…

2938. 区分黑球与白球

题目 桌子上有 n 个球,每个球的颜色不是黑色,就是白色。 给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 1 和 0 分别代表黑色和白色的球。 在每一步中,你可以选择两个相邻的球并交换它们。 返回「将所有黑色球都移到…

Leetcode:电话号码的字母组合

题目链接&#xff1a;17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;回溯&#xff09; class Solution { public:string tmp;//临时存放尾插内容vector<string> res;//将尾插好的字符串成组尾插给resvector<string> board{…

⌈ 传知代码 ⌋ AI驱动食物图像识别

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【数据结构】平衡二叉树(AVL树)

目录 前言 一、AVL树概念 二、AVL树节点定义 三、AVL树插入 1. 按照二叉搜索树的方式插入新节点 2. 维护节点的平衡因子与调整树的结构 a. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 b. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 c. 新节点插入…

前端面试项目细节重难点(已工作|做分享)想(八)

面试官&#xff1a;请你讲讲你在该项目中遇到的印象深刻的问题是什么&#xff1f; 答&#xff1a;我的回答&#xff1a;该项目的实现过程中我确实遇到了问题&#xff1a;【我会给大家整理回答思路和角度&#xff0c;那那么遇到这样的问题也可借鉴这种思路进行阐述】 第一层面…

RocketMQ教程(五):RocketMQ的工作原理2

工作原理 RocketMQ 是一个高性能、高吞吐量的分布式消息和流计算平台,它基于发布-订阅模式工作。其核心设计理念是确保消息传递的高效性、稳定性和可扩展性。RocketMQ 的工作原理主要可以分为以下几个部分: 1. 消息流程 消息发布: Producer 首先向 NameServer 查询目标 Top…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下&#xff0c;如果有错误请大佬指出&#xff0c;多谢&#xff01;&#xff01;&#xff01;

shell(一)

shell 既是脚本语言又是应用程序 查看自己linux系统的默认解析&#xff1a;echo $SHELL 创建第一个shell 文件 touch 01.sh编辑 vi 01.sh01.sh 文件内容 #!/bin/bash echo felicia保存 按Esc 然后输入:wq 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释…

无线麦克风什么牌子的音质效果好?一文揭秘领夹麦克风哪个品牌好

​近年来&#xff0c;无线领夹麦克风在各个领域都大放异彩&#xff0c;无论是直播、采访还是上课&#xff0c;都能看到它的身影。这款小小的无线麦克风&#xff0c;蕴含着巨大的能量&#xff0c;为媒体人的创作提供了强大的支持。对于想要更新设备的媒体人来说&#xff0c;现在…

打造国产软硬件一体化解决方案 YashanDB与宏杉科技完成多项兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与宏杉科技系列存储、系列服务器与数据库一体机等多款产品顺利完成兼容性互认证。经严格测试&#xff0c;双方产品完全兼容&#xff0c;稳定运行&#xff0c;共同提供高效、稳定、安全的国产软硬件一体化解决方案&…

tmux工具使用鼠标滚动窗口及分屏命令

tmux工具使用鼠标滚动窗口及分屏命令 1. tmux source配置文件 长期生效2. 临时生效3. 实现分屏 1. tmux source配置文件 长期生效 vim ~/.tmux.conf echo "set -g mouse on" > ~/.tmux.conf tmux source-file ~/.tmux.conf2. 临时生效 1. 进入到tmux命令窗口 2.…

流水线建构apk、abb实战(一)

在构建机上需要下载的工具 流水线中的构建机无法使用Android Studio中自带的sdk工具下载&#xff0c;所以得下载commandlinetools命令行工具&#xff0c;下载后使用随附的 sdkmanager 下载其他 SDK 软件&#xff0c;解压后按照/cmdline-tools/latest/bin/sdkmanager目录结构整…

【Java毕业设计】基于Java的教师考勤管理系统的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 vue技术1.4.2 B/S结构1.4.3 Spring Boot框架1.4.4 MySQL数据库1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能结构设计3.2 系统…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标&#xff0c;也会有一个输出。目标和输出之间的误差&#xff0c;就是用Loss Function来衡量的。所以&#xff0c;…

美国签证办理需要带哪些材料?

在申请美国签证时&#xff0c;准备充分的材料至关重要。以下知识人网整理的关于您可能需要携带的一些常见材料&#xff1a; 1.护照&#xff1a;您的护照必须是有效的&#xff0c;并且在签证申请过程中至少有六个月的有效期。 2.签证申请表&#xff1a;您需要填写并提交签证申请…

29 - 买下所有产品的客户(高频 SQL 50 题基础版)

29 - 买下所有产品的客户 selectc.customer_id fromCustomer c group byc.customer_id havingcount(c.product_key)(select count(distinct product_key) from Product);

Windows下安装和配置Redis

目录 1、下载redis压缩包 2、解压redis文件 3、启动redis临时服务 4、打开Redis客户端进行连接 5、使用一些基础操作来测试 5.1、输入ping命令来检测redis服务器与redis客户端的连通性 5.2、使用set和get命令测试redis数据库进行数据存储和获取 5.3、在命令中通过shut…