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

vue项目 Axios创建拦截器

Axios

    • 1. Axios 和 Ajax 简介
    • 2. Axios 和 Ajax 的区别
    • 3. 从 按钮 到 Axios请求后端接口的 大致顺序

1. Axios 和 Ajax 简介

Ajax(Asynchronous JavaScript and XML) 不是一种技术,而是一个编程技术概念,核心是通过 XMLHttpRequest 对象实现异步通信。

Axios 是一个独立的库,它既在浏览器环境中使用了 XMLHttpRequest,又在服务端使用 原生node.js http 模块。

2. Axios 和 Ajax 的区别

特性原生 Ajax(XMLHttpRequest)Axios
使用方式需要手动创建 和 管理 XMLHttpRequest 对象提供简洁的 API,如 axios.get()axios.post()
异步处理使用回调函数基于 Promise,支持 async/await
功能扩展功能有限,需手动实现内置拦截器、请求取消、自动转换 JSON 等功能
跨平台支持仅限浏览器支持浏览器和 Node.js

3. 从 按钮 到 Axios请求后端接口的 大致顺序

  1. 点击按钮
    点击按钮时,触发 @click 点击事件,就到了 login 函数。

    在这里插入图片描述

    <!-- 登录按钮 -->
    <el-form-item><el-button class="button" type="primary" auto-insert-space @click="login">登录</el-button>
    </el-form-item>
    
  2. login里请求接口的函数,写在了 user.js 文件中
    Login.vue

    示例代码

    import { userLoginService } from '@/api/user.js'
    import { ElMessage } from 'element-plus'//导入路由 router
    import {useRouter} from 'vue-router'
    const router = useRouter();//导入 有Pinia函数的token.js文件
    import { useTokenStore } from '@/stores/token'
    const tokenStore = useTokenStore();//登录函数 login
    const login = async () => {//调用接口,完成登录let result = await userLoginService(registerData.value);//alert(result.msg ? result.msg : '登录成功');ElMessage.success(result.msg ? result.mag : '登录成功');//把得到的token存储到pinia中tokenStore.setToken(result.data);//跳转到首页,使用useRouter切换组件,完成跳转router.push('/');
    }
    
  3. user.js 里的请求,都统一用 request.js 请求工具来完成
    在这里插入图片描述
    示例代码

    //导入request.js请求工具
    import request from '@/utils/request.js'//提供调用主次接口的函数
    export const userRegisterService = (registerData) => {//借助于UrlSearchParams完成传递const params = new URLSearchParams();for (let key in registerData) {params.append(key, registerData[key]);}return request.post('/user/register', params);
    }export const userLoginService = (loginData) => {const params = new URLSearchParams();for (let key in loginData) {params.append(key, loginData[key])}return request.post('/user/login', params);
    }
    
  4. 在请求工具 request.js 里,导入了Axios,并创建了请求拦截器响应拦截器
    有了拦截器,就可以在 请求服务前得到响应后 统一处理数据。
    在这里插入图片描述

    示例代码:

    //这里边相当于请求的工具,用来定制请求的实例//导入axios: npm install axios
    import axios from 'axios';//导入Message消息提示
    import { ElMessage } from 'element-plus';//定义一个变量,记录公共的前缀,baseURL
    // const baseURL = 'http://localhost:8080';
    // 这里的'/api'只是给后台访问的请求路径添加一个标识
    const baseURL = '/api';/*  axios.create()方法,把baseURL作为参数传入,该方法返回一个请求的实例instance,以后发送请求时,就不用axios.get了,直接用instance.get就可以 */
    const instance = axios.create({ baseURL })/* axios提供的拦截器,在请求或响应,被then或catch处理前拦截也就是在请求发出之前,有一个请求拦截器或在响应到达之前,有一个响应拦截器 *///导入Pinia
    import { useTokenStore } from '@/stores/token';
    //添加请求拦截器
    instance.interceptors.request.use((config) => {//请求前的回调const tokenStore = useTokenStore();//在pinia中定义的响应式数据,都不需要.valueif (tokenStore.token) {config.headers.Authorization = tokenStore.token;}return config},(err) => {//请求错误的回调Promise.reject(err);}
    )/* 由于模块加载的顺序,不能这样导入import { useRoute } from 'vue-router';const router = useRoute(); 
    */
    //这样导入就能用了
    import router from '@/router'//添加响应拦截器(这个拦截器本身就是异步的)
    instance.interceptors.response.use(//成功的回调result => {//判断业务状态码if (result.data.code === 0) {return result.data;}//操作失败ElMessage.error(result.data.msg ? result.data.msg : '服务异常');//异步操作的状态转换为失败return Promise.reject(result.data);},//失败的回调err => {//判断响应状态码,若为401,则说明未登录,提示请登录,并跳转到登录页面if(err.response.status === 401){ElMessage.error('请先登录');router.push('/login');}else{ElMessage.error('服务异常');}//异步的状态转化成失败的状态return Promise.reject(err);}
    )//把请求的实例instance导出,供其他地方调用
    export default instance;
    

    上述代码中的 const baseURL = ‘/api’,在另一篇文章 vue处理跨域问题 里有详细描述。

相关文章:

vue项目 Axios创建拦截器

Axios 1. Axios 和 Ajax 简介2. Axios 和 Ajax 的区别3. 从 按钮 到 Axios请求后端接口的 大致顺序 1. Axios 和 Ajax 简介 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09; 不是一种技术&#xff0c;而是一个编程技术概念&#xff0c;核心是通过 XMLHttpReques…...

NLP面试之-激活函数

一、动机篇 1.1 为什么要有激活函数&#xff1f; 数据角度&#xff1a;由于数据是线性不可分的&#xff0c;如果采用线性化&#xff0c;那么需要复杂的线性组合去逼近问题&#xff0c;因此需要非线性变换对数据分布进行重新映射;线性模型的表达力问题&#xff1a;由于线性模型…...

深入探究 Go 语言中的 Fx 框架:依赖注入的强大工具

在软件开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种重要的设计模式&#xff0c;它可以帮助我们降低代码的耦合度&#xff0c;提高代码的可测试性和可维护性。Go 语言作为一门高效、简洁的编程语言&#xff0c;拥有许多优…...

Notepad++ 中删除所有以 “pdf“ 结尾的行

Notepad 中删除所有以 “pdf” 结尾的行 操作步骤 1.打开文件&#xff1a; 在 Notepad 中打开你需要处理的文本文件。 2.打开查找和替换对话框&#xff1a; 按快捷键 Ctrl F&#xff0c;打开“查找和替换”对话框。 3.启用正则表达式模式&#xff1a; 在对话框的底部&#xf…...

b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述 我们有两个多臂老虎机&#xff08;Multi-Armed Bandit&#xff09;&#xff0c;分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布&#xff1a; 左边的老虎机&#xff1a;奖励服从均值为 500&#xff0c;标准差为 50 的正态分布&#xff0c;即…...

数据结构与算法之排序算法-插入排序

排序算法是数据结构与算法中最基本的算法之一&#xff0c;其作用就是将一些可以比较大小的数据进行有规律的排序&#xff0c;而想要实现这种排序就拥有很多种方法~ 那么我将通过几篇文章&#xff0c;将排序算法中各种算法细化的&#xff0c;详尽的为大家呈现出来&#xff1a; &…...

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是&#xff0c;本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为&#xff0c;包括但不限于在各类游戏中实施作弊等违规操作。若因违…...

【核心特性】从鸭子类型到Go的io.Writer设计哲学

在编程语言的设计中&#xff0c;鸭子类型和接口设计是两种非常重要的理念。它们都强调了对象的行为和能力&#xff0c;而非其具体的类型或继承关系。Go 语言的io.Writer 接口是这种设计理念的典型代表&#xff0c;它通过简洁的接口定义&#xff0c;实现了强大的功能和灵活性。 …...

InfiniBand与IP over InfiniBand(IPOIB):实现高性能网络通信的底层机制

在现代高性能计算(HPC)和数据中心环境中,网络通信的效率和性能至关重要。InfiniBand(IB)作为一种高性能的串行计算机总线架构,以其低延迟、高带宽和高可靠性而广泛应用于集群计算和数据中心。IP over InfiniBand(IPOIB)则是在InfiniBand网络上实现IP协议的一种方式,它…...

vue2和vue3插槽slot最通俗易懂的区别理解

在 Vue 的组件通信中&#xff0c;slot&#xff08;插槽&#xff09;的编译优化是一个重要的性能提升点。以下是 Vue2 和 Vue3 在 slot 处理上的差异及优化原理&#xff0c;用更直观的方式解释&#xff1a; Vue2 的 Slot 更新机制 想象一个父子组件场景&#xff1a; 父组件&am…...

在 Go 中实现事件溯源:构建高效且可扩展的系统

事件溯源&#xff08;Event Sourcing&#xff09;是一种强大的架构模式&#xff0c;它通过记录系统状态的变化&#xff08;事件&#xff09;来重建系统的历史状态。这种模式特别适合需要高可扩展性、可追溯性和解耦的系统。在 Go 语言中&#xff0c;事件溯源可以通过一些简单的…...

七、I2C通信读取LM75B温度

7.1 概述 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种同步、多主从、串行通信协议&#xff0c;由飞利浦公司开发&#xff0c;主要用于短距离通信&#xff0c;尤其在集成电路之间。 7.1.1 主要特点 两线制&#xff1a;仅需SDA&#xff08;数据线&#xff09;…...

Python 调用 Azure OpenAI API

在人工智能和机器学习快速发展的今天,Azure OpenAI 服务为开发者提供了强大的工具来集成先进的 AI 能力到他们的应用中。本文将指导您如何使用 Python 调用 Azure OpenAI API,特别是使用 GPT-4 模型进行对话生成。 准备工作 在开始之前,请确保您已经: 拥有一个 Azure 账户…...

Spring Boot 配置JPA数据库主从读写分离失败及解决办法

因为是老项目, Spring Boot 是1.4, 使用 AbstractRoutingDataSource 来做主从切换, 配置切面类在进入事务时切换成主库, 但实际运行起来却失败, 写操作路由到了从库 查了很多文章, 试了很多方法都无效, 包括修改注解 Transactional 的 propagation 属性, 清空主从标记等等 打…...

基于华为云镜像加速器的Docker环境搭建与项目部署指南

基于华为云镜像加速器的Docker环境搭建与项目部署指南 一、安装Docker1.1 更新系统包1.2 安装必要的依赖包1.3 移除原有的Docker仓库配置(如果存在)1.4 添加华为云Docker仓库1.5 安装Docker CE1.6 启动Docker服务1.7 验证Docker是否安装成功1.8 添加华为云镜像加速器地址二、…...

讲解下SpringBoot中MySql和MongoDB的配合使用

在Spring Boot中&#xff0c;MySQL和MongoDB可以配合使用&#xff0c;以充分发挥关系型数据库和非关系型数据库的优势。MySQL适合处理结构化数据&#xff0c;而MongoDB适合处理非结构化或半结构化数据。以下是如何在Spring Boot中同时使用MySQL和MongoDB的详细讲解。 1. 添加依…...

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器&#xff0c;它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中&#xff0c;属性选择器不仅可以提高代码的可维护性&#xff0c;而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例&#xff0c;从基础…...

2025 游戏试玩打码平台PHP源码

源码介绍 2025 游戏试玩打码平台PHP源码 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 源码程序采用yii框架phpMysql语言开发 功能完善&#xff0c;无后门 程序功能有: 1.游戏试玩功能 2.广告体验功能 3.打码功能 4.新人任务 5.开启宝箱功能 6.站长联盟功能 7.兑换商城功…...

【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)

📚基于人工势场的多机器人协同运动与避障算法研究 摘要1. 引言2. 方法说明2.1 人工势场模型2.2 运动控制流程3. 核心函数解释3.1 主循环结构3.2 力计算函数4. 实验设计4.1 参数配置4.2 测试场景5. 结果分析5.1 典型运动轨迹5.2 性能指标6. 总结与建议成果总结改进方向附录:完…...

自动化办公|xlwings 数据类型和转换

xlwings 数据类型和转换&#xff1a;Python 与 Excel 的桥梁 在使用 xlwings 进行 Python 和 Excel 数据交互时&#xff0c;理解两者之间的数据类型对应关系至关重要。本篇将详细介绍 Python 数据类型与 Excel 数据类型的对应关系&#xff0c;以及如何进行数据类型转换。 一、…...

北斗导航 | 基于多假设解分离(MHSS)模型的双星故障监测算法(MATLAB代码实现——ARAIM)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 双星故障监测算法 一、多星故障MHSS模型流程1、数据预处理2、构建假设模…...

部署 ollama + deepseek + open-webui 遇到的常见问题与解决建议

前言 前面部署了 ollama deepseek open-webui 这里聊聊部署过程中遇到的一些问题和解决方案。 包含 ollama 容器部署 和 本地部署 中所遇问题和解决方案。 1. ollama proxy 网络代理问题 ollama 容器部署 用不了 http https 的 proxy 代理&#xff08;配全局都没用&#xf…...

sql难点

一、 假设你有一个查询&#xff0c;需要根据 id 是否为 null 来动态生成 SQL 条件&#xff1a; xml复制 <select id"getResources" resultType"Resource">SELECT * FROM resources<where><if test"id ! null">and id <!…...

oracle表分区--范围分区

文章目录 oracle表分区分区的原因分区的优势oracle表分区的作用oracle表分区类型一、范围分区二、 创建分区表和使用&#xff1a;1、按照数值范围划分2、按照时间范围3、MAXVALUE2. 向现有表添加新的分区3、 分区维护和重新组织&#xff08;合并/删除&#xff09; oracle表分区…...

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…...

elment-plus的表单的其中一项通过了验证再去走别的函数怎么写,不是全部内容通过验证

<template> <el-form ref"formRef" :model"formData" :rules"formRules"> <el-form-item label"身份证号" prop"idCard"> <el-input v-model"formData.idCard" blur"getDetail()"…...

蓝桥杯试题:归并排序

一、问题描述 在一个神秘的岛屿上&#xff0c;有一支探险队发现了一批宝藏&#xff0c;这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字&#xff0c;代表了其珍贵程度。然而&#xff0c;由于某种神奇的力量&#xff0c;这批宝藏的顺序被打乱了&#xff0c;探险队…...

Untiy3d 铰链、弹簧,特殊的物理关节

&#xff08;一&#xff09;铰链组件 1.创建一个立方体和角色胶囊 2.给角色胶囊挂在控制脚本和刚体 using System.Collections; using System.Collections.Generic; using UnityEngine;public class plyer : MonoBehaviour {// Start is called once before the first execut…...

Visual Studio 进行单元测试【入门】

摘要&#xff1a;在软件开发中&#xff0c;单元测试是一种重要的实践&#xff0c;通过验证代码的正确性&#xff0c;帮助开发者提高代码质量。本文将介绍如何在VisualStudio中进行单元测试&#xff0c;包括创建测试项目、编写测试代码、运行测试以及查看结果。 1. 什么是单元测…...

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…...