axios 封装

接口请求前可能要加小菊花,同时需要对返回的数据的状态码相应处理,比如登录过期,所以需要对axios二次封装

借鉴自该大神:https://blog.csdn.net/qq_30669833/article/details/81701588

原来博客园有插入代码的功能,我还傻逼似的用Tab.- -!

/*aixos封装处理*/
import axios from 'axios'
import router from '../../router.js'
import qs from 'qs'
import { Loading, Message } from 'element-ui';

var loadingInstance;
axios.interceptors.request.use(function(config) {
    // 显示loading
    loadingInstance = Loading.service({
        lock: true,
        text: 'Loading',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    });
    return config;
}, function(err) {
    errorState(err)
})

// 添加响应拦截器(对接口响应返回数据做点什么)----------------------------------------------------------------
axios.interceptors.response.use(function(res) {
    return res.data;
}, function(err) {
    errorState(err);
})

// 错误的统一处理---------------------------------------------------------------------------
function errorState(err) {
    loadingInstance.close();
    var e = (err + '').indexOf('timeout')>-1 ? '请求超时' : err + '';
    Message.error(e);
    return err;
}

// 封装数据返回成功提示函数(对后台返回状态码进行处理)---------------------------------------------------------------------------
function successState(res) {
    console.log(JSON.stringify(res))
    loadingInstance.close();
    if(res.code === '9001') {
        return res;
    }else if(res.code === '8001') {
        Message.error('8001!');
    }else if(res.code === '7001') {
        localStorage.removeItem('sid');
        router.push('/login');
    }else if(res.code === '6001') {
        Message.error('6001!');
    }else if(res.code === '5001') {
        Message.error('5001!');
    }else if(res.code === '4001') {
        Message.error('4001!');
    }else if(res.code === '3001') {
        Message.error('3001!');
    }else if(res.code === '2001') {
        Message.error('2001!');
    } else if(res.code === '1001') {
        Message.error('账号密码错误!');
    }else{
        Message.error('res.message');
    }
}

// 封装axios--------------------------------------------------------------------------------------
function apiAxios(method, url, params) {
    let httpDefault = {
        method: method,
        // baseURL: baseURL,
        url: url,
        params: method === 'GET' || method === 'DELETE' ? params : null,
        data: method === 'POST' || method === 'PUT' ? qs.stringify(params) : null,
        timeout: 10000
    }

    return new Promise((resolve, reject) => {
        axios(httpDefault)
        .then((res) => {
            successState(res);
            resolve(res);
        }).catch((err) => {
            errorState(err)
            reject(err)
        })
    })
}

// 输出函数getAxios、postAxios、putAxios、delectAxios,供其他文件调用-----------------------------
// Vue.js的插件应当有一个公开方法 install。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象。
export default {
    install: function(Vue) {
        Vue.prototype.getAxios = (url, params) => apiAxios('GET', url, params)
        Vue.prototype.postAxios = (url, params) => apiAxios('POST', url, params)
        Vue.prototype.putAxios = (url, params) => apiAxios('PUT', url, params)
        Vue.prototype.delectAxios = (url, params) => apiAxios('DELECT', url, params)
    }
}

main.js 里引入
import axiosJs from '@/assets/js/axios.js'
axiosJs.install(Vue);

 

转载于:https://www.cnblogs.com/92xcd/p/9933493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值