vue封装axios的方式

Posted Cxymds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue封装axios的方式相关的知识,希望对你有一定的参考价值。

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

以上是关于vue封装axios的方式的主要内容,如果未能解决你的问题,请参考以下文章

Vue--封装axios跨域

vue项目中axios的封装

vue2小知识实现axios的二次封装

vue搭建项目之设置axios

vue 封装propmise 第一种 -----axios封装---api资源管理

Vue第九天学习笔记之网络模块封装