request.js
4.51 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import axios from 'axios'
import qs from 'qs'
import {
MessageBox,
Message,
// Loading,
Notification
} from 'element-ui'
import store from '@/store'
import {
getToken
} from '@/utils/auth'
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 3000 // request timeout
})
// let loadingInstance
// request interceptor
service.interceptors.request.use(
config => {
const token = sessionStorage.getItem('access_token')
// const csrf = store.getters.csrf
if (token) {
config.headers = {
'access-token': token,
'Content-Type': 'application/x-www-form-urlencoded'
}
}
if (config.url === 'refresh') {
config.headers = {
'refresh-token': sessionStorage.getItem('refresh_token'),
'Content-Type': 'application/x-www-form-urlencoded'
}
}
// let options = {
// lock: true,
// fullscreen: false,
// text: '数据加载中……',
// // background: '#FFCC00',
// spinner: 'el-icon-loading'
// };
const options = {
type: 'success',
message: config.url,
title: 'request axios ',
showClose: true,
duration: 3000
}
Notification(options)
// loadingInstance = Loading.service(options);
config.method === 'post'
? config.data = qs.stringify({
...config.data
})
: config.params = {
...config.params
}
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['X-Token'] = getToken()
}
config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
return config
// do something before request is sent
},
error => {
// do something with request error
Message({
message: error || 'Error',
type: 'error',
duration: 5 * 1000
})
console.log(error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
const options = {
type: 'error',
message: response.status,
title: 'response status value ',
showClose: true,
duration: 1000
}
Notification(options)
// Notification.close()
// 这里根据后端提供的数据进行对应的处理
console.log('response===>', response)
// 定时刷新access-token
// if (!response.data.value && response.data.data.message === 'token invalid') {
// // 刷新token
// store.dispatch('refresh').then(response => {
// sessionStorage.setItem('access_token', response.data)
// }).catch(error => {
// throw new Error('token刷新' + error)
// })
// }
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000) {
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// to re-login
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
confirmButtonText: 'Re-Login',
cancelButtonText: 'Cancel',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('error', error)
// console.log(JSON.stringify(error));
// 500的状态也应该处理一下
// 401-403的状态也应该处理一下
const text = JSON.parse(JSON.stringify(error)).response.status === 404
? '404'
: '网络异常,请重试'
Message({
message: text || 'Error',
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
// 假设你想移除拦截器
// axios.interceptors.request.eject(service);
export default service