axois 在vue中配置

import axios from 'axios'
import {Message, Loading} from 'element-ui'
import {delCookie, getToken} from "@/api/baseData";
import api from "@/api/api";
import {Base64} from 'js-base64'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({showSpinner: false})
let timeRange = [0,];
let loadingInstance = null;
let loadingNum = 0;
let openLoading = (showLoading) => {
    if (loadingNum === 0 && showLoading) {
        let option = {
            fullscreen: true,
            text: '正在加载,请稍候...',
            background: 'rgba(0,0,0,.2)'
        }
        loadingInstance = Loading.service(option)
        NProgress.start();
    }
    loadingNum += 1;
}

let closeLoading = () => {
    loadingNum = loadingNum - 1;
    if (loadingNum <= 0) {
        loadingInstance.close();
        NProgress.done();
        loadingNum = 0;
    }
}
axios.defaults.baseURL = '';
//axios.defaults.timeout = 30000;
// axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf8';
axios.defaults.crossDomain = false;
axios.defaults.withCredentials = false; // 设置crose, 访问权限,允许携带cookie
// axios.defaults.headers.common['access_token'] = getToken;// 设置请求头为Authorization

axios.interceptors.request.use(
    config => {
        if (config.showLoading == false) {
            openLoading(config.showLoading)
        } else {
            openLoading(true)
        }

        const token = getToken()
        if (token != '') {
            config.headers.Authorization = getToken();
        }
        // 2022-01-18 liaohuan 为userName的值进行base64编码,原直接为明文
        var userName = localStorage.getItem("userName");
        var base64UserName = Base64.encode(userName);
        config.headers.uId = base64UserName;
        // 2022-04-15 liaohuan 国际化需求,将当前中英文标志放入header头中传给后端
        var lan = window.sessionStorage.getItem("language");
        if(null === lan || undefined === lan || '' === lan){
            lan = 'zh';
        }
        config.headers["Language"] = lan;

        if (config.noToken) {
            delete config.headers.Authorization
        }
        return config;
    }, error => {
        closeLoading();
        Message.error({message: '请求超时!'})
        return Promise.error(error)
    }
);

axios.interceptors.response.use(
    response => {
        if (response.status == 203) {
            if (!window.isDebug) {
                Message.error({
                    message: '未登录,请重新登录!',
                    customClass: 'fixedMessage',
                });
                this.$axios.get(`${api.logOut}`).then(res => {
                    let userColor = localStorage.getItem('colorObj');
                    localStorage.clear();
                    localStorage.setItem('colorObj', userColor);
                    delCookie('access_token');
                    delCookie('userName');
                    window.location.href = res.data.data;

                })
            }
        }
        if (response.data.code == 2001 || response.data.code == 2008) {
            if (!window.isDebug) {
                Message.error({
                    message: '登录已过期,请重新登录!',
                    customClass: 'fixedMessage',
                });
                let userColor = localStorage.getItem('colorObj');
                localStorage.clear();
                localStorage.setItem('colorObj', userColor);
                delCookie('access_token');
                delCookie('userName');
                window.location.href = res.data.data;
            }
            ;
        }
        closeLoading();
        // 根据返回码判断响应结果 200 成功,否则抛出错误
        if (response.status === 200) {
            return Promise.resolve(response)
        } else {
            return Promise.reject(response)
        }
    },
    error => {
               closeLoading();
                 if (!error.response) {
                   Message.error({
                     message: "服务器错误!",
                     customClass: "fixedMessage",
                   });
                 }
               if (error.response.status) {
                 switch (error.response.status) {
                   case 400:
                     console.log("请求参数错误!");
                     break;
                   case 401:
                     break;
                   case 403:
                     console.log("登录过期!");
                     break;
                   case 404:
                     break;
                   case 500:
                    //  只使用axiosInit文件中的做提示
                    //  Message.error({
                    //    message:
                    //      "服务器错误" +
                    //      (error.response.data && error.response.data.message
                    //        ? ": " + error.response.data.message
                    //        : ""),
                    //  });
                     break;
                   default:
                     console.log("error:", error.response.data.message);
                 }
               }
               return Promise.reject(error.response);
             }
);

export default axios;

//main.js 

//全局注册组件
Vue.prototype.$axios = Axios;

 

 获取基础配置数据

let getCookie = (name) => {
  let arr, reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')

  if (arr = document.cookie.match(reg)) {
    return unescape(arr[2])
  } else {
    return null
  }
}

let setCookie = (name, value, expire) => {
  let exp = new Date()
  exp.setTime(exp.getTime() + expire * 1000)
  document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString() + ';path=/'
}

let delCookie = (name) => {
  let exp = new Date()
  exp.setTime(exp.getTime() - 60 * 60 * 1000)
  let cval = getCookie(name)
  if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString() + ';path=/'
}


let getToken = () => {
  let token = getCookie('access_token') || localStorage.getItem('access_token') || ''
  let token_type = getCookie('token_type') || localStorage.getItem('token_type') || ''
  return token_type + ' ' + token;

};

let getRefreshToken = () => {
  let token = getCookie('refresh_token') || localStorage.getItem('refresh_token') || ''
  return token;
};

let getTokenTime = () => {
  let time = getCookie('expires_in') || localStorage.getItem('expires_in') || 7200
  return time;

};

 

posted @ 2023-04-04 15:18  代码MM  阅读(40)  评论(0编辑  收藏  举报