vue3【使用axios并封装axios请求】

news2024/12/27 10:03:25

第一步:安装axios

npm install axios

第二步:编写请求文件

新建request.js

简单的axios封装,里面相关提示信息,自己可以引入element-plus去添加

/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from 'axios';
import QS from 'qs';
import router from '../router/index'
//qs.stringify()是将对象 序列化成URL的形式,以&进行拼接
//  let protocol = window.location.protocol; //协议
//  let host = window.location.host; //主机
//  axios.defaults.baseURL = protocol + "//" + host;
axios.defaults.baseURL = '/api'

axios.interceptors.request.use( //响应拦截
    async config => {
        // 每次发送请求之前判断vuex中是否存在token        
        // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
        // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
        config.headers.token = sessionStorage.getItem('token')
        return config;
    },
    error => {
        return Promise.error(error);
    })
// 响应拦截器
axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response); //进行中        
        } else {
            return Promise.reject(response); //失败       
        }
    },
    // 服务器状态码不是200的情况    
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                // 401: 未登录                
                // 未登录则跳转登录页面,并携带当前页面的路径                
                // 在登录成功后返回当前页面,这一步需要在登录页操作。                
                case 401:
                    break
                // 403 token过期                
                // 登录过期对用户进行提示                
                // 清除本地token和清空vuex中token对象                
                // 跳转登录页面                
                case 403:
                    sessionStorage.clear()
                    router.push('/login')
                    break
                // 404请求不存在                
                case 404:
                    break;
                // 其他错误,直接抛出错误提示                
                default:
            }
            return Promise.reject(error.response);
        }
    }
);
/** 
 * get方法,对应get请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
const $get = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params,
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
/** 
 * post方法,对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
const $post = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.post(url, QS.stringify(params)) //是将对象 序列化成URL的形式,以&进行拼接   
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
//下面是将get和post方法挂载到vue原型上供全局使用、
// vue2.x中是通 Vue.prototype 来绑定的,像这样Vue.prototype.$toast = Toast。在vue3中取消了Vue.prototype,推荐使用globalProperties来绑定,
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

几个需要注意的点:

  • 1、我们可以通过window.location.protocol和window.location.host获取协议和主机ip端口,然后统一设置axios的默认请求baseURL
//  let protocol = window.location.protocol; //协议
//  let host = window.location.host; //主机
//  axios.defaults.baseURL = protocol + "//" + host;
  • 2、qs.stringify()是将对象 序列化成URL的形式,以&进行拼接 

(1)先引入 qs模块

import QS from 'qs';

(2)在请求参数前面包裹使用

 (3)查看参数结果,就转换为了formdata传参形式,方便快捷、

  • 3、全局挂载 ,vue2.x中是通 Vue.prototype 来绑定的,例如 Vue.prototype.$toast = Toast。在vue3中取消了Vue.prototype,推荐使用 globalProperties 来绑定,挂载到组件的proxy上
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

 第三步:在main.js引入

注意:axios在request.js中已经全局引入了,在main.js中就不需要再引入axios,否则会报错

 第四步:在组件中使用

引入

 由于 Vue3中,在setup中无法通过this获取组件实例,console.log(this)打印出来的值是undefined。因此我们需要通过 getCurrentInstance 方法获取当前组件实例。

注意:getCurrentInstance只能在setup生命周期钩子中使用。  

proxy是getCurrentInstance()对象中的一个属性,然后通过对象的解构赋值方式拿到proxy。 

import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance();

然后通过proxy拿到挂载好的get和post请求。

function testFunc() {
    let data = {
        roleId: "A",
        username: "dpc",
        password: "--",
        sysType: "zhfw",
    }
    proxy.$post("/index/login", data).then((response) => {
        console.log(response)
    })
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux入门篇-安装CentOS

一、先组织硬件 先把“买”一台空白的电脑,再进行操作系统的安装。 windows中,处理器: 本机 实际运行的时候能当多少个CPU来使呢?16个 处理器的数量是CPU的数量;(本机上一个插槽,就只有一个CP…

同城跑腿能赚多少钱?“爱折腾”的创业者是否值得入局一试?

跑腿服务兴起的最大特点是节省时间和成本。现在城市发展越来越快,真的应该是“时间就是金钱”的道理。帮助人们排队购物、送外卖、送文件、买花、叫醒服务……“跑腿”在生活中无处不在。 同城跑腿系统的前景有多大? 一方面,外卖和网上购物…

深入学习MYSQL-使用触发器

触发器 每个表最多支持6个触发器,(insert,update,delete)之前和之后。 删除触发器 drop trigger trigger_name;insert 触发器  在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入…

第一章--Java语言概述

一 Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 二 计算机的硬件与软件 2.1 计算机组成:硬件软件 2.2 CPU、内存与硬盘 CPU(Central Processing Unit,中央处理器) 人靠大脑思考,电脑靠CPU来运算、控…

【beego】bee工具安装使用

bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。 1、安装 go get github.com/beego/bee2、配置bee.exe 运行完以上指令后,打开$GOPATH/bin ,我的路径…

刷完这个笔记,17K不能再少了....

大家好,最近有不少小伙伴在后台留言,得准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想…

2直接连接的网络与VLAN划分-2.1【实验】【计算机网络】

2直接连接的网络与VLAN划分【实验】【计算机网络】 前言推荐2直接连接的网络与VLAN划分2.1共享式以太网和交换式以太网实验目的实验内容及实验环境实验原理共享式以太网交换式以太网 实验过程搭建实验环境初始化序训练操作共享式以太网-操作交换式以太网查看共享式以太网冲突查…

java中ArrayList顺序表的常见操作

ArrayList常见操作 1.插入操作 尾插 e boolean add(E e) 将 e 插入到 index 位置&#xff08;指定位置插入&#xff09; void add(int index, E element) 尾插 c 中的元素(直接插入一个集合) boolean addAll(Collection<? extends E> c) 将c插入到index位置&#x…

java基础--(一)创建对象在内存中的理解

1、代码 package demo; public class Car {String color;int num;public Car() {}public void run(){System.out.println("color " color);System.out.println("num " num);}public Car(String color, int num) {this.color color;this.num num;} …

2022年美国大学生数学建模竞赛D题数据瘫痪? 使用我们的分析!解题全过程文档及程序

2022年美国大学生数学建模竞赛 D题数据瘫痪? 使用我们的分析! 原题再现&#xff1a; 背景   很多公司将数据视为战略资产&#xff0c;但却很难从中获益。妥善管理这一资源(数据)可以带来竞争优势。因此&#xff0c;公司需要建立一一个集成的数据和分析(D&A) 系统&…

网络中的数据传输模式有哪些-镭速

数据传输模式定义了两个通信设备之间信息流的方向&#xff0c;也称为数据通信或定向模式&#xff0c;同事也规定了信息在计算机网络中从一处流向另一处的方向。 在开放系统互连&#xff08;OSI&#xff09;层模型中&#xff0c;物理层专用于网络中的数据传输。它主要决定数据到…

微信小程序原生开发功能合集十四:登录健权及注册功能实现

本章实现微信自动登录及注册修改功能,包括匿名账号生成、权限自动检测、注册界面及注册流程的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn…

1-SpringBoot工程打包后为何执行Java -Jar就能启动?

本文主要分享SpringBoot工程项目如何打包成一个可直接通过java -jar执行的jar&#xff0c;并且简单分析其启动步骤原理。 文章目录 1.SpringBoot如何打包成一个可执行jar&#xff1f;2.SpringBoot打包成的jar为何可以直接Java -jar执行&#xff1f;3.一窥SpringBoot初启动 1.S…

企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程

这是一份面向直播新手的企业直播说明教程&#xff0c;字数较多&#xff0c;完整看完&#xff0c;可能会需要求10分钟&#xff0c;建议您可以【收藏】&#xff0c;如果本文章对您有帮助&#xff0c;就帮助【点个赞】吧~~~ 阿酷TONY / 2023-5-12 / 原创文章 / 长沙 / 文章…

今天的CRM系统,还仅仅是一套营销工具吗?

如今&#xff0c;数字化浪潮正席卷全球&#xff0c;数字经济已经成为全球经济未来发展的新动能和新方向。据IDC的预测显示&#xff0c;全球对数字转型的投资将以每年17.1%的复合速度增长&#xff0c;2023年这类投资预计将达到2.3万亿美元。而CRM系统&#xff08;客户关系管理系…

用友NC软件被locked1勒索病毒攻击加密的方式,服务器oracle数据库中了勒索病毒

用友NC软件是一款企业级管理软件&#xff0c;广泛应用于各行各业的集团企业中。然而&#xff0c;最近有关locked1勒索病毒对用友NC软件的攻击已经引起了广泛的关注和担忧。下面将为大家介绍一下有关locked1攻击加密用友NC软件的方式&#xff0c;并给出合理的解决方案。 首先&a…

Kafka 之生产者与消费者基础知识:基本配置、拦截器、序列化、分区器

一、配置 1. 必须要配置的参数&#xff1a; kafaf集群地址列表&#xff1a;理论上写一个节点地址&#xff0c;就相当于绑定了整个kafka集群了&#xff0c;但是建议多写几个&#xff0c;如果只写一个&#xff0c;万一宕机就麻烦了kafka消息的key和value要指定序列化方法kafka对…

2023年湖北省建设厅特种作业操作证报名条件是什么?

建筑施工特种作业人员是指在房屋建筑和市政工程施工活动中&#xff0c;从事可能对本人、他人及周围设备设施的安全造成重大危害作业的人员。建筑施工特种作业人员必须经建设主管部门考核合格&#xff0c;取得建筑施工特种作业人员操作资格证书&#xff08;以下简称“资格证书”…

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人

零代码基础,一分钟教你快速搭建微信 ChatGPT 机器人 1.注册 Railway 账号:2.部署3. 配置1)点击 Configure2)选择仓库地址3)点击安装4)配置信息如下图:5)部署:deploy6)部署完成:7)微信扫码登录8) 根据需要修改配置:最后总结:效果预览:致谢开源项目:本教程收集于…

U盘分区合并的方法有哪些?

大多数用户在硬盘的使用中会进行分区操作&#xff0c;同时为了方便整理&#xff0c;部分用户也会选择给自己的U盘分区&#xff0c;可是在后续操作中发现U盘分区没有什么用处&#xff0c;因此就想要重新将其合并&#xff0c;但要把分区重新合并没那么容易&#xff0c;那么U盘被分…