美文网首页让前端飞
vue +axios+promise封装

vue +axios+promise封装

作者: 徐小君的简书啊 | 来源:发表于2018-11-20 17:54 被阅读4次

    import axios                from 'axios'

    import {Message}from 'element-ui'

    import router from '../router/permission'

    import Vuefrom 'vue'

    import VueCookiesfrom 'vue-cookies'

    const moment =require('moment');

    const Base64 =require('js-base64').Base64;

    // loading框设置局部刷新,且所有请求完成后关闭loading框

    var loading;

    function startLoading() {

    loading = Vue.prototype.$loading({

    lock:true,

    text:"Loading...",

    target:document.querySelector('.loading-area')//设置加载动画区域

      });

    }

    function endLoading() {

    loading.close();

    }

    // 声明一个对象用于存储请求个数

    var needLoadingRequestCount =0;

    function showFullScreenLoading() {

    if (needLoadingRequestCount ===0) {

    startLoading();

    }

    needLoadingRequestCount++;

    };

    function tryHideFullScreenLoading() {

    if (needLoadingRequestCount <=0)return;

    needLoadingRequestCount--;

    if (needLoadingRequestCount ===0) {

    endLoading();

    }

    };

    // 请求拦截

    axios.interceptors.request.use(config => {

    let token ="";

    showFullScreenLoading();

    if(VueCookies.isKey('userinfo')) {

    const USERINFO = VueCookies.get('userinfo');

    if(config.method =='get') {

    token =Base64.encode(USERINFO.token +'|' +moment().utc().format('YYY-MM-DD HH:mm:ss' +'|' +JSON.stringify(config.params)));

    config.params.hospitalId =USERINFO.hospitalId;

    }else {

    token =Base64.encode(USERINFO.token +'|' +moment().utc().format('YYY-MM-DD HH:mm:ss' +'|' +JSON.stringify(config.data)));

    config.data.hospitalId =USERINFO.hospitalId;

    }

    let TOKENSTART =token.slice(0,10),

    TOKENEND =token.slice(10);

    token =TOKENEND +TOKENSTART;

    config.headers['token'] =token;

    }

    return config;

    }, err => {

    tryHideFullScreenLoading();

    Message.error({message:'请求超时!' });

    return Promise.resolve(err);

    })

    // 响应拦截

    axios.interceptors.response.use(res => {

    tryHideFullScreenLoading();

    switch(res.data.code) {

    case 200:

    return res.data.result;

    case 401:

    router.push('/login');

    VueCookies.remove('userinfo');

    return Promise.reject(res);

    case 201:

    Message.error({message: res.data.msg });

    return Promise.reject(res);

    default :

    return Promise.reject(res);

    }

    }, err => {

    tryHideFullScreenLoading();

    if(!err.response.status) {

    return false;

    }

    switch(err.response.status) {

    case 504:

    Message.error({message:'服务器被吃了⊙﹏⊙∥' });

    break;

    case 404:

    Message.error({message:'服务器被吃了⊙﹏⊙∥' });

    break;

    case 403:

    Message.error({message:'权限不足,请联系管理员!' });

    break;

    default:

    return Promise.reject(err);

    }

    })

    axios.defaults.timeout =300000;// 请求超时5fen

    export const postJsonRequest = (url, params) => {

    return axios({

    method:'post',

    url: url,

    data: params,

    headers: {

    'Content-Type':'application/json',

    },

    });

    }

    export const postRequest = (url, params) => {

    return axios({

    method:'post',

    url: url,

    data: params,

    transformRequest: [function (data) {

    let ret =''

          for (let it in data) {

    ret +=encodeURIComponent(it) +'=' +encodeURIComponent(data[it]) +'&'

          }

    return ret

        }],

    headers: {

    'Content-Type':'application/x-www-form-urlencoded'

        }

    });

    }

    export const getRequest = (url, data ='') => {

    return axios({

    method:'get',

    params: data,

    url: url,

    });

    }

    相关文章

      网友评论

        本文标题:vue +axios+promise封装

        本文链接:https://www.haomeiwen.com/subject/xuixqqtx.html