index.ts
2.38 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
import axios from 'axios'
// import qs from 'qs'
import { ElMessage } from 'element-plus'
import useUserStore from '@/store/modules/user'
const api = axios.create({
baseURL: (import.meta.env.VITE_OPEN_PROXY === 'true') ? `/api/${import.meta.env.VITE_APP_USER_API_BASEURL}` : `${import.meta.env.VITE_API_BASEURL}${import.meta.env.VITE_APP_USER_API_BASEURL}`,
timeout: 1000 * 60,
responseType: 'json',
})
api.interceptors.request.use(
(request) => {
const userStore = useUserStore()
/**
* 全局拦截请求发送前提交的参数
* 以下代码为示例,在请求头里带上 token 信息
*/
request.headers.Authorization = localStorage.getItem('token');
// if (userStore.isLogin && request.headers) {
// request.headers.Token = userStore.token
// }
// 是否将 POST 请求参数进行字符串化处理
if (request.method === 'post') {
// request.data = qs.stringify(request.data, {
// arrayFormat: 'brackets',
// })
}
return request
},
)
api.interceptors.response.use(
(response) => {
/**
* 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
* 假设返回数据格式为:{ status: 1, error: '', data: '' }
* 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录
* 请求出错时 error 会返回错误信息
*/
if (response.status === 200) {
if (response.data.code !== '00000') {
// 这里做错误提示,如果使用了 element plus 则可以使用 Message 进行提示
// ElMessage.error(options)
ElMessage({
type: 'error',
message: response.data.msg,
duration: 5*1000
})
return Promise.reject(response.data)
}
}
else {
// useUserStore().logout()
}
return Promise.resolve(response.data)
},
(error) => {
let message = error.message
if (message === 'Network Error') {
message = '后端网络故障'
}
else if (message.includes('timeout')) {
message = '接口请求超时'
}
else if (message.includes('Request failed with status code')) {
message = `接口${message.substr(message.length - 3)}异常`
}
ElMessage({
message,
type: 'error',
})
return Promise.reject(error)
},
)
export default api