import axios from 'axios' import { Message } from 'element-ui' import store from '@/store' import { getToken, removeToken } from '@/utils/auth' import { asyncRouterMap } from '../router' import Router from 'vue-router' import router from '../router' import Cookies from 'js-cookie' import JSONbig from 'json-bigint'; // create an axios instance const service = axios.create({ // baseURL: process.env.BASE_API+'/v1/api', // api 的 base_url timeout: 1000000, // request timeout, // 设置跨域请求为true,如果是cros同源请求的话,则可以不用加此项 withCredentials: false, headers: { // 'X-Requested-With': 'XMLHttpRequest', // 'Content-Type': 'application/json;charset=UTF-8', // 'Authorization': getToken() }, }) /* 是否有请求正在刷新token*/ window.isRefreshing = false /* 被挂起的请求数组*/ const refreshSubscribers = [] /* push所有请求到数组中*/ function subscribeTokenRefresh(cb) { refreshSubscribers.push(cb) } /* 刷新请求(refreshSubscribers数组中的请求得到新的token之后会自执行,用新的token去请求数据)*/ function onRrefreshed(token) { refreshSubscribers.map(cb => cb(token)) } /* 判断token是否过期*/ function isTokenExpired() { /* 从cookies中取出token过期时间*/ const expiredTime = new Date(parseInt(Cookies.get('token_expired_at')) * 1000).getTime() / 1000 /* 获取本地时间*/ const nowTime = new Date().getTime() / 1000 /* 获取校验时间差*/ // let diffTime = JSON.parse(sessionStorage.diffTime) /* 校验本地时间*/ // nowTime -= diffTime /* 如果 < 10分钟,则说明即将过期*/ return (expiredTime - nowTime) < 10 * 60 } /* 判断token是否过期*/ function isRefreshTokenExpired() { /* 从cookies中取出token过期时间*/ const expiredTime = new Date(parseInt(Cookies.get('token_expired_at')) * 1000).getTime() / 1000 /* 获取本地时间*/ const nowTime = new Date().getTime() / 1000 /* 获取校验时间差*/ // let diffTime = JSON.parse(sessionStorage.diffTime) /* 校验本地时间*/ // nowTime -= diffTime /* 如果 < 0分钟,则说明即将过期*/ return (expiredTime - nowTime) <= 0 } // service.interceptors.request.use( // config => { // //console.log( router.app._route.meta,'Router.meta') // // Do something before request is sent // config.headers['Authorization'] = getToken() // return config // }, // error => { // console.log(error) // for debug // Promise.reject(error) // } // ) service.defaults.transformResponse = [ function (data) { try { // 正常同通过return JSON.parse(data)对数据进行转换 // 但是转化完成的数据可能超出安全数据长度 // 因此我们定制使用第三包来转化 return JSONbig.parse(data); } catch (err) { console.log(err); // 转换失败返回一个空对象 return {}; } } ]; // response interceptor service.interceptors.response.use( response => response, error => { if (error.response && error.response.status === 403) { Message({ message: '登录过期请重新登录!', type: 'error', duration: 5 * 1000 }) store.dispatch('FedLogOut').then(() => { window.location.href = '#/login' }) // Router.replace('/') } else { console.log(error.message) // Message({ // message: error.message, // type: 'error', // duration: 5 * 1000 // }) } return Promise.reject(error) } ) export default service