首页 > 其他分享 >vue封装axios的方式(一)

vue封装axios的方式(一)

时间:2023-06-17 17:13:01浏览次数:44  
标签:axios 封装 请求 get token vue post response

vue封装axios的方式(一)

直接将下面代码复制在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)

使用

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

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'
      })
    }
  })
}

标签:axios,封装,请求,get,token,vue,post,response
From: https://www.cnblogs.com/Cxymds/p/17487722.html

相关文章

  • vue封装axios的方式(二)
    vue封装axios的方式(二)创建utils\request.jsimportaxiosfrom'axios'import{Message,MessageBox}from'element-ui'//导入element-ui组件库//创建axios的对象constinstance=axios.create({baseURL:"https://api.cat-shop.penkuoer.com&quo......
  • vue封装axios的方式(三)
    vue封装axios的方式(三)与第二种封装基本相同,不同之处在于api的处理格式//引入axiosimportaxiosfrom'axios'//引入qs模块,对数据进行序列化importQSfrom'qs'//引入message模块,toast提示import{message}from'ant-design-vue'//引入storage模块,操作tokenimport......
  • vue-json-viewer 展示json数据
    vue-json-viewer展示json数据当项目需要再网页中展示原始的json数据的时候,我们期望能够对json进行格式化展示,并且能够进行展开和折叠。vue-json-viewer可以帮助我们实现这样的功能。1.安装$npminstallvue-json-viewer@2--save//Vue2$npminstallvue-json-viewer@3-......
  • 解决vue2中methods写的方法无法使用箭头函数
    1.情况:在method写递归函数,函数内使用了this.变量,报错变量为undefined,原因是function内this指向改变,因改写为箭头函数,使其this不被改变,但是methods内又无法写箭头函数 2.解决:使用var获取this,供函数内使用 ......
  • 使用Docker将Vite Vue项目部署到Nginx二级目录
    Vue项目配置使用Vite创建一个Vue项目,点我查看如何创建配置打包路径在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径在项目跟路径下创建两个文件:.env.production、.env.development,写入一下内容:##生产环境NODE_ENV='production'VITE_BASE_PATH=/form-design......
  • vue3Props
    一、Props声明一个组件需要显式声明它所接受的props,这样Vue才能知道外部传入的哪些是props,哪些是透传 attribute在使用SFC时,props可以使用defineProps()宏来声明:如子组件中(1)constprops=defineProps(['foo'])(2)constprops=defineProps({ title:String, age......
  • VUE
    vue//注册全局组件//importTitleHeaderfrom'@/vcomponent/TitleHeader'//Vue.component(TitleHeader)//Vue.component("TitleHeader",TitleHeader)auto-complete="new-password"--密码不自动添加:close-on-click-modal="false"--el-dialog......
  • 前端Vue仿滴滴打车百度地图定位查找附近出租车或门店信息(更新版)
    前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12982效果图如下:使用方法<!--官方文档:https://dafrok.github.io/vue-baidu-map/#/zh/start/base-->#安装vue-baidu-map插......
  • TienChin 开篇-运行 RuoYiVue
    开篇目的:让大家随心所欲的DIY若依的脚手架不会涉及到太多基础知识踊跃提问(不懂得地方大家提问我会根据提问,后续一一解答疑惑)下载RuoYiVueGitee:https://gitee.com/y_project/RuoYi-Vue下载完毕之后,这个项目当中存在一个ruoyi-ui这个是前端,只是放在了这个项目当中方便我们进......
  • 面向对象-封装
    面向对象的封装是一种面向对象编程的核心概念,它指的是将数据和对数据的操作封装在一个类中,通过类的访问权限控制,隐藏内部实现细节,提供公共接口供其他对象访问。封装的目的是实现数据的安全性和灵活性。通过将数据和操作数据的方法封装在一起,可以隐藏实现细节,防止外部直接访问和修......