Vue:vue3中封装Axios请求

news2025/2/26 2:53:18

解决、

 

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、创建文件夹存放封装好的js
  • 二、封装代码
  • 三、配置
  • 四、在需要的组件中使用
  • 总结

前言

 这篇文章直接能够在项目中使用,没有解释什么东西,直接复制粘贴,嘎嘎用。


一、创建文件夹存放封装好的js

我是创建在src/request/axios.js

二、封装代码如下

直接将下面代码复制在request.js中,封装了get,post请求,需要自己配置的是:自己的请求地址,tokenKey是否为token,改为自己存入本地的token名,可以看一下代码中的注释,很好看懂。

/**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 = 'http://localhost:8888'

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)
                })
        });
    }
    //下面是vue3必须加的,vue2不需要,只需要暴露出去get,post方法就可以
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

三、配置

在main.js中,引入我们第一步封装的js,然后use()

//引入封装Axios请求
import Axios from './request/axios';

const app = createApp(App).use(VueAxios, axios).use(ElementPlus).use(router).use(Axios)

四、在需要的组件中使用

重点来了,封装完了,归根到底我得用。在组件中导入getCurrentInstance。加上如下代码。

import {  getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
  function logout(){
    proxy.$post("/sysStaff/logout",{}).then((response)=>{
      console.log(response)
      if(response.code == 200){
        sessionStorage.clear();
        router.push('/')
        ElMessage({
          message: '退出成功',
          type: 'success',
        })
      }
    })
  }

调用的时候,当中有两个参数,第一个参数是路径,第二个参数是个对象,里面可以写要发送请求的参数,比如:username:shuaibi,password:123456。


总结

vue项目当中对axios请求的封装就是如此,非常的容易!!!

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

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

相关文章

安装运行vue-element-admin的报错问题-解决办法

一、原本的安装方法-出错 官网安装链接如下: https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/#%E5%AE%89%E8%A3%85 我遇到的报错主要在以下阶段: 按上方安装链接里git clone后npm install无法安装npm install完成后无法启动&#xff0…

vue中的proxy代理的使用(解决跨域问题)

声明 1. 首先我们应该知道,前端axios在本地发送的请求如果你不把路径写全,它都是会默认加上自己项目所在的端口,就比如说: axios.get(/login) axios.get(/hello) 当我点击发送按钮之后,以上两行代码实际为:…

使用alist将云盘映射为WebDAV

使用alist将云盘映射为WebDAV1. 下载2. Windows系统安装与配置2.1 alist 启动与配置2.2 添加启动与关闭的脚本2.3 开机启动3. Linux系统安装与配置3.1 alist 启动与配置3.2 守护进程​4. 测试 WebDAValist是一款开软的将网盘及本地硬盘映射到网络端的软件,支持多种存…

【Web前端】怎样用记事本写一个简单的网页-html

前言 出于对网站的一些突然的兴趣,我开始了解网页是如何被设计出来的。 作者水平有限,如有问题,欢迎指出。 文章目录前言一. 对网页设计的基本了解1. 网站2. 网页编辑工具1)语言2)软件二. 第一个网页1. 实操——用记事…

watch跟computed的区别

大家好,我是大帅子,今天给大家讲一下watch跟computed的区别,下面我们直接开始吧 功能上:computed是计算属性,watch是监听一个值的变化,然后执行对应的回调。 是否调用缓存:computed中的函数所依赖的属性没有发生变化,…

【Web 安全】XSS 攻击详解

文章目录一、XSS 攻击概述二、XSS 攻击原理1. XSS的攻击载荷(1) script 标签(2) svg 标签(3) img 标签(4)body 标签(5) video 标签(6)…

VUE框架

1 概述 VUE是一款前端框架,免除了JavaScript中的DOM操作,简化书写 在JavaScript中有很多没有逻辑的繁琐的重复操作,如下 而VUE改善了这个问题,简化了DOM书写。 VUE是基于MVVM(Model-View-ViewModel)思想,实现数据的…

新一代状态管理工具 -- Pinia 上手指南

一:Pinia简介和五大优势 Pinia是vue生态里Vuex的替代者,一个全新的vue状态管理库。在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia。 那先来看看Pinia比Vuex好的地方,也就是Pinia的五大优势。 可以对Vue2和Vue3做到很好的支…

5个前端练手项目(html css js canvas)

前言: 首先祝大家端午节快乐。本篇文章有5个练手项目 对于刚学完前端三剑客的你们。应该是一个很好的实践 目录 🥩.跑马灯 1.1效果图: 1.2思路解析 1.3源码 🍧.彩虹爱心 2.1效果图 2.2思路解析 2.3源码 🌮.闹钟…

vue中this.$set()的用法

1、this.$set()的作用 向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。 this.$set()用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性。 简单来说:就是我们在methods中给数据添加了一…

尚品汇项目笔记

尚品汇项目笔记git代码地址前端Vue核心1、vue文件目录分析2、项目配置3、组件页面样式4、清除vue页面默认的样式5、pages文件夹6、footer组件显示与隐藏7、路由传参8、多次执行相同的push问题9、定义全局组件10、代码改变时实现页面自动刷新11、Home首页其它组件12、封装axios1…

微信小程序实现分享至朋友圈的功能

微信小程序实现分享至朋友圈的功能 微信小程序从基础库 2.11.3 开始,可将小程序页面分享到朋友圈。适用于内容型页面的分享,不适用于有较多交互的页面分享。 1 设置分享状态 小程序页面默认不可被分享到朋友圈,开发者需主动设置“分享到朋友…

HBuilder X的下载与使用(详细步骤)

一、HBuilder X的下载 这里我们前往HBuilder下载官网地址:https://www.dcloud.io/进入官网后,我们可以看到HBuilder目前有两个版本,一个是windows版,一个是mac版。下载一个自己电脑适合的版本,这里我下载步骤用的是wi…

【Ajax】如何通过axios发起Ajax请求

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录axios  什么是axios  axios发起GET请求  axios发起POST请求  直接使用axios发起get…

JS解构赋值

一、前言 解构赋值语法是一种 Javascript 表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。本文将讨论解构赋值的作用与其用法。 目录 一、前言 二、用途 三、数组的解构 1.变量声明并且赋值时的解构 2.默认值 3.剩余数组赋值…

js字符串转换为对象格式的3种方法

背景: js字符串转换为对象格式,一般都会想到JSON.parse(),但数据不是标准的 JSON 格式的时候会解析出错,这时候就可以使用eval() 函数、new Function()方法来转换。 常用3种将字符串string转为json对象 方法: var str…

如何解决 npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题

1、问题描述: 在vue项目中,当我们在终端使用指令:npm install 下载 node_modules (节点_模块) 时出现报错的情况。 node_modules是安装node后用来存放用包管理工具下载安装的包的文件夹。比如webpack、gulp、grunt这些工具。 主要是这个原因&…

基于Web的疫情防控管理系统

目 录 1 绪论........................................................................................................... 1 1.1 研究背景..................................................................................................................... 1 1…

前端如何调用后端接口进行数据交互(极简)

前端调用后端接口,获得数据并渲染 一、介绍 一个完善的系统,前后端交互是必不可少的,这个过程可以分成下面几步: 前端向后端发起请求后端接口接收前端的参数后,开始层层调用方法处理数据后端将最终数据返回给前端接…

vue2和vue3的区别(由浅入深)

前言 vue2和vu3之前的区别,一直以来是面试必考题目,如何回答,回答的层次决定了面试者的对于vue2,3的理解,以及对于vue3目前稳定版本发展的方向的了解,即考察使用程度,又考察了学习能力&#xf…