vue axios 统一请求封装

import axios from 'axios';

import ElementUI from 'element-ui';

 

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

 

axios.defaults.retry = 2;

 

axios.defaults.transformRequest = [

    function(data) {

        let arr = [];

        for (let it in data) {

            arr.push(encodeURIComponent(it) + '=' + encodeURIComponent(data[it]));

        }

        return arr.join('&');

    }

];

 

let http = axios.create({

    baseURL: '',

    // `transformResponse` 在传递给 then/catch 前,允许修改响应数据

    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }

});

http.interceptors.request.use(

    (config) => {

        config.data.userToken = localStorage.getItem('user_token');

        document.querySelector('#loading-icon').classList.add('show');

        return config;

    },

    (error) => {

        document.querySelector('#loading-icon').classList.remove('show');

        return Promise.reject(error);

    }

);

 

//http response 封装后台返回拦截器

http.interceptors.response.use(

    (response) => {

        document.querySelector('#loading-icon').classList.remove('show');

        //当返回信息为未登录或者登录失效的时候重定向为登录页面

        if (response.data.Code == '-402' || response.data.message == '用户未登录或登录超时,请登录!') {

            // debugger;

            window.location.href = '#/login';

        } else {

            if (response.data.Code == -301) {

                // secondRequestHandler(response.config.url, response.config.data);

                //console.log(response);

                let param = {};

                param.userTrue = 1;

                let dataArr = response.config.data.split('&');

                if (dataArr.length) {

                    dataArr.forEach((val) => {

                        let ls = val.split('=');

                        if (ls[0]) {

                            param[ls[0]] = ls[1];

                        }

                    });

                }

                if (confirm(response.data.Msg)) {

                    return new Promise((resolve, reject) => {

                        http

                            .post(response.config.url, param)

                            .then((res) => {

                                console.log(res);

                                resolve(res);

                            })

                            .catch((error2) => {

                                reject(error2);

                            });

                    });

                }

            } else if (response.data.Code == -1) {

                ElementUI.Message({

                    showClose: true,

                    type: 'error',

                    message: response.data.Msg

                });

                return response;

            } else if (response.data.Code == 1) {

                return response;

            } else if ([ -101, -401, -402, -403 ].indexOf(response.data.Code) === -1) {

                ElementUI.Message({

                    showClose: true,

                    type: 'error',

                    message: response.data.Msg

                });

                return response;

            }

        }

 

        return response;

    },

    (error) => {

        ElementUI.Message({

            showClose: true,

            type: 'error',

            message: '系统错误,请联系管理员'

        });

        document.querySelector('#loading-icon').classList.remove('show');

        return Promise.reject(error);

    }

);

 

export default http;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值