vue封装axios请求

在vue项目中我们发送请求一般是使用axios 我们可以封装axios来避免冗余代码
首先引入axios

npm install axios

创建环境配置文件

NODE_ENV = 'development'
VITE_APP_TITLE = 'dev'
VITE_APP_BASE_API = '/test'
VITE_SERVE = "http://127.0.0.1"

上面是创建dev配置文件 也可以定义多个 自己配置即可

创建一个request的文件夹
index.ts(配置axios)

import axios from "axios";
import router from "@/router";

import {ElMessage} from "element-plus";

declare module 'axios' {
    interface AxiosInstance {
        (config: AxiosRequestConfig): Promise<any>
    }
}
// 创建一个 axios 实例
const service = axios.create({
    baseURL: import.meta.env.VITE_SERVE,
    timeout: 60000, // 请求超时时间毫秒
});

//请求拦截器
service.interceptors.request.use((config) => {
    // config.headers("token", localStorage.getItem("token"));
    config.headers.token = localStorage.getItem("token");
    //返回配置对象
    return config;
});

//响应拦截器 我的项目code 0代表成功 401 -1 1代表登录状态失效  需要跳转到登录页面
service.interceptors.response.use((response) => {
    const {code, msg} = response.data;
    if (code !== 0) {
        ElMessage({
            message: msg,
            type: "error",
        });
    }
    if (code == 401 || code == -1 || code == 1) {
        setTimeout(async () => {
            // 登录失效
            localStorage.clear();
            await router.push("/login");
        }, 2000);
    }
    //简化数据
    return response.data;
}, (error) => {
    console.log("异常", error);
},)


export default service;

method.ts(封装请求)

import service from "@/request/index";
// 地址
let prefix = import.meta.env.VITE_APP_BASE_API;

/**
 * get请求
 * @param url 请求地址
 * @param data 请求参数
 * @param api 特殊的请求代理
 * @returns
 */
export function get(url: string, data: any = {}, api?: string) {
  let baseUrl = prefix;
  let params = [];
  for (const item in data) {
    params.push(`${item}=${data[item]}`);
  }
  if (api) {
    baseUrl = api;
  }
  url =
    baseUrl + url + (Object.keys(data).length ? "?" : "") + params.join("&");
  return service({
    url,
    method: "GET",
    data,
  });
}
/**
 * post请求
 * @param url 请求地址
 * @param data 请求参数
 * @returns
 */
export function post(url: string, data = {}) {
  url = prefix + url;
  return service({
    url,
    method: "POST",
    data,
  });
}

创建api文件夹(汇总请求)
api.ts

import {get, post} from "@/request/method";

/** 获取验证码 **/
export const API_Login_GetSmsCode = (phone: any) => get(`/sms/send?phone=${phone}`);
/** 验证码登录 **/
export const API_Login = (params: any) => post("/user/login", params);

上面演示了两种请求方式 get和post的使用方法

在vue页面中直接导入

import {API_Login, API_Login_GetSmsCode} from "@/api/api";

// 登录表单数据
const loginForm = reactive({
  // 验证码登录字段
  smsCode: "",
  userPhone: ""
})

// 发送验证码
async function smsSend() {
  if (loginForm.userPhone.length <= 0) {
    ElMessage.error("请输入手机号")
    return
  }
  const {code} = await API_Login_GetSmsCode(loginForm.userPhone)
  if (code === 0) {
    ElMessage.success("发送成功")
    startCountdown();
  }
}

// 登录请求
async function loginReq() {
  const {code, data} = await API_Login(loginData)
  if (code === 0) {
      ElMessage.success("登录成功")
      localStorage.setItem("token", data.token)
      localStorage.setItem("userName", data.userName)
      await $router.push('/home')
  }
}

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

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

相关文章

宁德时代2025年Verify入职测评语言理解及数字推理真题SHL题库汇总、考情分析

宁德时代社招Verify入职测评对薪酬有着重要影响&#xff0c;其规定正确率达到80%才能顺利通过测评。这体现了公司对人才专业素养与能力的严格要求&#xff0c;旨在筛选出真正符合岗位需求的优秀人才。测评内容涵盖了专业知识、技能运用、逻辑思维等多方面&#xff0c;只有综合能…

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之&#xff1a;如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念&#xff0c;强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理&#xff0c;这里有…

Go学习:多重赋值与匿名变量

1. 变量的多重赋值 1.1 基本语法格式 go语言中&#xff0c;可以将多个赋值语句 合并成 一句&#xff0c;比如&#xff1a; a : 10 b : 20 c : 30//a,b,c三个变量的赋值语句可以简练成以下格式a, b, c : 10, 20, 30 1.2 交换变量值 当需要交换两个变量的值时&#…

ArkUI-应用数据持久化

应用数据持久化&#xff0c;是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象&#xff0c;存储介质上的数据形态可能是文本、数据库、二进制文件等。 HarmonyOS标准系统支持典型的存储数据形态&#xff0c;包括用户…

SOLID原则学习,开闭原则

文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Bertrand Meyer提出。开闭原则的核心思想是…

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试&#xff0c;他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的&#xff0c;上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念&#xff0c;考试也是考个人对这些的理解&#xff0c;还挺好玩的哈…

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今&#xff0c;它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习&#xff1f;深度学习是如何应用在视觉检测上的呢&#xff1f; 什么是深度学习&#xff1f; 深度学习是…

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…

深度学习每周学习总结R3(LSTM-火灾温度预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R4中的内容&#xff0c;为了便于自己整理总结起名为R3&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据导入3. 数据…

全方位解读消息队列:原理、优势、实例与实践要点

全方位解读消息队列&#xff1a;原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下&#xff0c;分布式系统架构愈发复杂&#xff0c;消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”&#xff0c;在古代&#xff0c;各地的信件、物资运…

conda install包时出现CondaHTTPError: HTTP 403 FORBIDDEN for url ....问题,但已经排除镜像源问题

最近连WIFI下包出现如下问题&#xff0c;已排除镜像源问题。但是一直装不上包。 CondaHTTPError: HTTP 403 FORBIDDEN for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/ca-certifica Elapsed: 00:00.202308 An HTTP error occurred when trying to …

【Rust自学】11.3. 自定义错误信息

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏&#xff0c;而这篇文章讲的就是它…

linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决

前言 今天在使用linux的时候&#xff0c;使用上下键想翻出历史命令时&#xff0c;却出现[[A[[A[[A[[B^[[B这种东东&#xff0c;而tab键补全命令的功能也无法使用。最终发现是由于当前用户使用的shell是/bin/sh的原因。 解决方法 运行以下命令&#xff0c;将默认 shell 设置为…

【操作系统】课程 8文件管理 同步测练 章节测验

8.1知识点导图 它详细地展示了文件的定义、分类、逻辑结构、目录结构以及文件共享和保护的各个方面。下面是对图中内容的文字整理&#xff1a; 文件定义 文件是具有文件名的一组相关信息的集合。 文件分类 按用途分类&#xff1a;系统文件、用户文件、库文件。按存取控制属性分…

1月9日星期四今日早报简报微语报早读

1月9日星期四&#xff0c;农历腊月初十&#xff0c;早报#微语早读。 1、上海排查47家“俄罗斯商品馆”&#xff1a;个别店铺被责令停业&#xff0c;立案调查&#xff1b; 2、西藏定日县已转移受灾群众4.65万人&#xff0c;检测到余震646次&#xff1b; 3、国家发改委&#x…

1.8-9号Python猛刷动态规划

今日宽恕:总结不是纠结过去&#xff0c;表达不是“见斑知豹”&#xff0c;还要更多信息整合后去回答。 题目一 3297.统计重新排列后包含另一个字符串| 示例 1&#xff1a; 输入&#xff1a;word1 "abcabc", word2 "abc" 输出&#xff1a;10 解释&#…

【Python】论文长截图、页面分割、水印去除、整合PDF

有的学校的论文只能在线预览&#xff0c;且存在水印。为保存到本地方便查阅&#xff0c;可以使用以下工作流进行处理&#xff1a; 用浏览器打开在线论文预览界面&#xff1b;使用fastone capture软件截长图&#xff1b;将论文按页数进行分割&#xff1b;按照阈值消除浅色的背景…