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; };