Vue:vue3中封装Axios请求

1 篇文章 0 订阅
1 篇文章 0 订阅

解决、

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


前言

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


一、创建文件夹存放封装好的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请求的封装就是如此,非常的容易!!!

  • 14
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue3发送Axios请求的步骤如下: 1. 首先,确保你已经在项目安装了Axios库。你可以使用以下命令在你的Vue项目安装Axios: ``` yarn add axios ``` 2. 在需要发送Axios请求的组件,你可以通过导入Axios来使用它。在组件顶部添加以下代码: ```javascript import axios from 'axios'; ``` 3. 接下来,你可以使用Axios发送请求。你可以在Vue的生命周期钩子函数(例如created)或者其他需要发送请求的方法使用Axios。例如,发送一个GET请求可以这样写: ```javascript axios.get('http://example.com/api/data') .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }); ``` 4. 你也可以发送其他类型的请求,比如POST、PUT、DELETE等。只需将请求方法替换为对应的方法即可。例如,发送一个POST请求可以这样写: ```javascript axios.post('http://example.com/api/data', { data: 'example' }) .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }); ``` 5. 你还可以在请求使用其他的配置选项,比如设置请求头、发送请求时携带cookie等。具体的配置选项可以参考Axios的官方文档。 总结起来,使用Vue3发送Axios请求的步骤包括安装Axios库、导入Axios、使用Axios发送请求以及处理响应和错误。通过这些步骤,你可以在Vue3项目方便地发送和处理Axios请求。 : 官方文档,<https://axios-http.com/docs/intro>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值