Vue 封装的 axios 类的使用(小bug 改进)

http类

import { baseUrl } from "./config";   //引入config.js中的配置
import axios from "axios";   		//引入axios
import qs from "querystringify";       //form-Data请求时的工具类

class Http{

    axios = null;
    lastRequestIntercept = null;
    constructor() {
        //在初始化方法中,创建一个 axios的实例 , 并配置一些基础配置
        this.axios = axios.create({
            baseURL:baseUrl,
            timeout:10000,
        });
        //为新建的 实例添加一个响应 响应 响应 拦截器, 可以根据情况, 在err 中,设置,如里返回的参数为401,就让用户跳转到 登录页等功能, 自已写, 也可以把这个拦截器删除掉
        this.axios.interceptors.response.use(response=>{
            return response.data;
        },(err)=>{
            console.log(err)
            if(err){

            }
            return Promise.reject(err)
        })

    }
    //dataType的选项有 queryString == qs, formData, json
    //封装一个请求的方法
    request({url,data,method="get",auth=false,dataType="json"}){
        //如果请求中需要token,就在store缓存中取出token,并设置在请求头中
        if(auth){
            //这是一个请求拦截器,可以在请求之前添加,任何想要添加的数据
            this.axios.interceptors.request.use((config)=>{
                let token = localStorage.getItem("token")
                token && (config.headers.token = token);
                console.log(config)
                return config;
            },(err)=>{
                return Promise.reject(err)
            })
        }
        //如果是get方法, 直接传参数就可以了 这里的 data是一个json对象  如  data = {aparam:"aaa",bparam:"bbbb"}
        if(method === "get"){
            return this.axios.get(url,{params:data})
        }
        //下面的 data 都是一个对象参数
        //当post传值时, 有可能是 json 的 也有可能是 qs 的, 也有可以是文件类型的 formdata的,下面的方法根据情况,分别组织了参数格式,以及header的头,正确传参可以了
        if(method === "post"){
            if(dataType === "json") {
                return this.axios.post(url, data, {
                    headers:{"Content-Type":"application/json"}
                })
            }else if(dataType === "formData"){
                let formData = new FormData();
                Object.keys(data).forEach((key)=>{
                    formData.append(key,data[key])
                })
                return this.axios.post(url, formData, {headers:{"Content-Type":"multipart/form-data"}})
            }else if(dataType === "qs"){
                return this.axios.post(url,qs.stringify(data),{
                    headers:{"Content-Type":"application/x-www-form-urlencoded"}
                })
            }
        }
    }

}

export { Http }

业务类 api 继承 http
api.js

import {Http} from "@/utils/http"
class api extends Http{

    static getinstance(){
        return new api();
    }
    
    login(data){
        return this.request({
            url:"/api/user/oauth2",
            method:"post",
            data,
            dataType:"formData"
        })
    }

    //用户是否是新用户
    isnewuser(){
        return this.request({
            url:"/api/user/isNew",
            method:"post",
            auth:true
        })
    }

    //添加抢票
    addrobinfo(data){
        return this.request({
            url:"/api/ticket/add",
            method:"post",
            data,
            dataType:"formData",
            auth:true,
        })
    }
    //抢票记录
    robrecord(){
        return this.request({
            url:"/api/ticket/index",
            method:"post",
            auth:true
        })
    }
}
export default api

页面中使用时

在这里插入图片描述
改进方法, 每一次都来 new api()的实例有点麻烦,所以, 我在 api 的类中添加了一个静态方法
在这里插入图片描述
有了静态方法,就不用每次使用时就要new了
看一下使用的代码
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Android BUG 之 Error: Activity class {} does not exist

项目场景: 更换包名,运行报错 问题描述 原因分析: 在替换包名的时候要确认,配置文件跟build中的保持一致,在更换后还要将旧包的缓存数据清理掉 解决方案: 1 替换后删除 app 下的build 文件夹 2 Rebuild Pr…

Leetcode2976. 转换字符串的最小成本 I

Every day a Leetcode 题目来源:2976. 转换字符串的最小成本 I 解法1:最短路 建图,从 original[i] 向 changed[i] 连边,边权为 cost[i]。没边的边权设为 INF。 然后用 Floyd 算法求图中任意两点最短路,得到 g 矩阵…

MT6785安卓核心板_联发科MTK6785/Helio G95/曦力G95核心板定制

MT6785安卓核心板是基于MT6785(Helio G95)处理器,具备八核处理器结构,包括2颗主频为2.05GHz的Cortex A76处理器和6颗主频为2.0GHz的Cortex A55处理器,以及六颗Cortex-A55处理器。而在GPU方面,采用了Arm Mali-G76 MC4,频…

zabbix监控windows主机

下载安装zabbix agent安装包 Zabbix官网下载地址: https://www.zabbix.com/cn/download_agents?version5.0LTS&release5.0.40&osWindows&os_versionAny&hardwareamd64&encryptionOpenSSL&packagingMSI&show_legacy0 这里使用zabbix agent2 安装 …

22、Kubernetes核心技术 - 整合Rancher通过界面管理k8s集群

目录 一、概述 二、Rancher API Server 的功能 2.1、授权和角色权限控制 2.2、使用 Kubernetes 的功能 2.3、配置云端基础信息 2.4、查看集群信息 三、Rancher 安装 3.1、前置环境 3.2、通过 Docker 来进行安装Rancher 3.3、在 Rancher 的界面上绑定k8s集群 3.4、在 …

C语言入门教程,C语言学习教程(第二部分:C语言初探)二

十、C语言的三套标准:C89、C99和C11 我们今天使用的 Windows、Linux、Mac OS 等操作系统都是由一种叫做 Unix 的系统演化而来。Unix 作为80年代主流的操作系统,是整个软件工业的基础,是现代操作系统的开山鼻祖,C语言就是为 Unix …

html的全选反选

一、实验题目 html实现选择框的全选和反选 二、实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>全选和反选</title></head><body><ul>兴趣爱好</ul><input id"all"…

国芯科技荣膺高工智能汽车“年度车规MCU高成长供应商”,加速产品精准化系列化布局

2023年12月13—15日&#xff0c;2023&#xff08;第七届&#xff09;高工智能汽车年会在上海召开&#xff0c;大会以“寻找拐点”为主题&#xff0c;通过超80场主题演讲及多场圆桌对话&#xff0c;为智能汽车赛道参与者「备战2024」提供全方位的决策支持。 作为汽车电子芯片领…

网络安全漏洞的常见类型

网络犯罪分子可以利用的常见网络安全漏洞包括凭证薄弱、缺乏数据加密、配置错误、软件过时和零日漏洞。这些漏洞通常会导致网络攻击&#xff0c;绕过组织的安全措施并窃取机密数据。组织需要识别并缓解这些漏洞&#xff0c;以防止安全漏洞。 继续阅读以了解有关网络安全漏洞的…

Apache ECharts | 一个数据可视化图表库

文章目录 1、简介1.1、主要特点1.2、使用场景 2、安装方式一&#xff1a;从下载的源代码或编译产物安装方法二&#xff1a;从 npm 安装方法三&#xff1a;⭐定制安装echarts.js 3、使用 官网&#xff1a; 英语&#xff1a;https://echarts.apache.org/en/index.html 中文&a…

ChatGLM2-6B 大语言模型本地搭建

ChatGLM模型介绍&#xff1a; ChatGLM2-6B 是清华 NLP 团队于不久前发布的中英双语对话模型&#xff0c;它具备了强大的问答和对话功能。拥有最大32K上下文&#xff0c;并且在授权后可免费商用&#xff01; ChatGLM2-6B的6B代表了训练参数量为60亿&#xff0c;同时运用了模型…

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网&#xff1a;https://code.visualstudio.com/ 下载地址&#xff1a;https://code.visua…

在学习爬虫前的准备

1. 写一个爬虫程序需要分几步 获取网页内容。 我们会通过代码给一个网站服务器发送请求&#xff0c;它会返回给我们网页上的内容。 在我们平时使用浏览器访问服务器内容是&#xff0c;本质上也是向服务器发送一个请求&#xff0c;然后服务器返回网页上的内容。只不过浏览器还会…

Oracle VM VirtualBox xx needs the Micrsoft Visual C++ 2019错误

错误展示 解决方法 重修安装 Visual C 文件 1、前往官网 C 中 Windows 编程概述 | Microsoft Learn 2、找到对应的包 左边导航栏依次选择&#xff1a; 部署本机桌面应用程序-----重新分发Visual C 文件-----最新受支持的Visual C可再发型程序包下载 根据自己电脑系统进行选…

数据结构期末复习笔记

文章目录 数据结构期末复习第一章&#xff1a;数据结构绪论第二章&#xff1a;顺序表与单链表第三章&#xff1a;其它链表第四章&#xff1a;栈如何中缀转后缀后缀如何计算 第五章&#xff1a;队列第六章&#xff1a;串第七章&#xff1a;树的概念和遍历第八章&#xff1a;赫夫…

创建一个郭德纲相声GPTs

前言 在这篇文章中&#xff0c;我将分享如何利用ChatGPT 4.0辅助论文写作的技巧&#xff0c;并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&…

Win10 自带微软输入法怎么切换成简体字 快捷鍵是什么?

环境&#xff1a; Win10专业版 问题描述&#xff1a; 微軟輸入法怎麽切換中文簡體 快捷鍵&#xff0c;之前不小心按了快捷键 解决方案&#xff1a; 1.按CtrlShiftF快捷键转换简体字或繁体字 2.可以在“设置-时间和语言-区域和语言-语言-中文&#xff08;中华人民共和国&a…

为什么选择嬴图?

图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系&#xff0c;实体用顶点来表达&#xff0c;而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图&#xff1…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作&#xff0c;推出基于 AI 的角色引擎和 Copilot 助理&#xff0c;旨在提升游戏中 NPC 的交互力和生命力&#xff0c;提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC&#xff0c;通过生成式 AI 驱动 NPC 行为&#xff0c;使其动态响应玩家操作…

计算机基础面试题 |19.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…