Admin
2022-11-15 5aa2cc1ebbdd538fbdf4b21862c7f50a4aa09317
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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