Blame view
src/utils/request.js
4.58 KB
80a28914e init |
1 |
import axios from 'axios' |
50760eab9 auto commit the c... |
2 3 4 5 6 7 8 |
import qs from 'qs' import { MessageBox, Message, // Loading, Notification } from 'element-ui' |
80a28914e init |
9 |
import store from '@/store' |
50760eab9 auto commit the c... |
10 11 12 |
import { getToken } from '@/utils/auth' |
80a28914e init |
13 |
|
a6e433928 auto commit the c... |
14 |
// const baseUrl = 'http://localhost/sys-glass/api'; |
b58b17e1e auto commit the c... |
15 16 17 |
// const baseUrl = 'http://localhost:8087'; const baseUrl = '/dev-api' // const baseUrl = process.env.VUE_APP_BASE_API // url = base url + request url |
80a28914e init |
18 19 |
// create an axios instance const service = axios.create({ |
a6e433928 auto commit the c... |
20 21 |
// baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url baseURL: baseUrl, // url = base url + request url |
50760eab9 auto commit the c... |
22 23 |
withCredentials: true, // send cookies when cross-domain requests timeout: 3000 // request timeout |
80a28914e init |
24 |
}) |
50760eab9 auto commit the c... |
25 |
// let loadingInstance |
80a28914e init |
26 27 28 |
// request interceptor service.interceptors.request.use( config => { |
50760eab9 auto commit the c... |
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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' } } |
a86b16bba auto commit the c... |
43 44 45 46 47 48 49 |
// Notification({ // type: 'success', // message: baseUrl + config.url, // title: 'request axios ', // showClose: true, // duration: 3000 // }) |
50760eab9 auto commit the c... |
50 51 52 53 54 55 56 57 |
// loadingInstance = Loading.service(options); config.method === 'post' ? config.data = qs.stringify({ ...config.data }) : config.params = { ...config.params } |
80a28914e init |
58 59 60 61 |
if (store.getters.token) { // let each request carry token // ['X-Token'] is a custom headers key // please modify it according to the actual situation |
d7d9c38c2 auto commit the c... |
62 |
config.headers['X-Token'] = getToken() |
80a28914e init |
63 |
} |
50760eab9 auto commit the c... |
64 |
config.headers['Content-Type'] = 'application/x-www-form-urlencoded' |
80a28914e init |
65 |
return config |
50760eab9 auto commit the c... |
66 |
// do something before request is sent |
80a28914e init |
67 68 |
}, error => { |
50760eab9 auto commit the c... |
69 70 71 72 73 |
Message({ message: error || 'Error', type: 'error', duration: 5 * 1000 }) |
d7d9c38c2 auto commit the c... |
74 |
console.log(error) // for debug |
80a28914e init |
75 76 77 78 79 80 81 82 83 |
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 |
50760eab9 auto commit the c... |
84 |
*/ |
80a28914e init |
85 86 87 88 89 90 91 |
/** * Determine the request status by custom code * Here is just an example * You can also judge the status by HTTP Status Code */ response => { |
50760eab9 auto commit the c... |
92 |
const options = { |
a86b16bba auto commit the c... |
93 |
type: response.status == 200 ? 'success' : 'error', |
50760eab9 auto commit the c... |
94 95 96 97 98 99 100 |
message: response.status, title: 'response status value ', showClose: true, duration: 1000 } Notification(options) // Notification.close() |
a6e433928 auto commit the c... |
101 |
|
50760eab9 auto commit the c... |
102 103 104 105 106 107 108 109 110 111 112 |
// 这里根据后端提供的数据进行对应的处理 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) // }) // } |
80a28914e init |
113 |
const res = response.data |
d7d9c38c2 auto commit the c... |
114 115 |
// if the custom code is not 20000, it is judged as an error. |
80a28914e init |
116 117 118 119 120 121 |
if (res.code !== 20000) { Message({ message: res.message || 'Error', type: 'error', duration: 5 * 1000 }) |
d7d9c38c2 auto commit the c... |
122 |
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; |
80a28914e init |
123 124 |
if (res.code === 50008 || res.code === 50012 || res.code === 50014) { // to re-login |
d7d9c38c2 auto commit the c... |
125 126 127 |
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', |
80a28914e init |
128 129 130 |
type: 'warning' }).then(() => { store.dispatch('user/resetToken').then(() => { |
d7d9c38c2 auto commit the c... |
131 |
location.reload() |
80a28914e init |
132 133 134 135 136 |
}) }) } return Promise.reject(new Error(res.message || 'Error')) } else { |
d7d9c38c2 auto commit the c... |
137 |
return res |
80a28914e init |
138 139 140 |
} }, error => { |
50760eab9 auto commit the c... |
141 142 143 144 145 146 147 |
console.log('error', error) // console.log(JSON.stringify(error)); // 500的状态也应该处理一下 // 401-403的状态也应该处理一下 const text = JSON.parse(JSON.stringify(error)).response.status === 404 ? '404' : '网络异常,请重试' |
d7d9c38c2 auto commit the c... |
148 |
Message({ |
50760eab9 auto commit the c... |
149 |
message: text || 'Error', |
d7d9c38c2 auto commit the c... |
150 151 152 |
type: 'error', duration: 5 * 1000 }) |
50760eab9 auto commit the c... |
153 |
|
80a28914e init |
154 155 156 |
return Promise.reject(error) } ) |
50760eab9 auto commit the c... |
157 158 |
// 假设你想移除拦截器 // axios.interceptors.request.eject(service); |
80a28914e init |
159 |
export default service |