chenyc
2022-07-18 67b129e70011e2f20f235662b0c6aba56d996cda
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
import axios, {AxiosError, AxiosResponse} from 'axios'
import { Session } from '@/utils/storage'
import { ElMessage } from 'element-plus'
 
 
const BASE_URL = 'https://hemobs.icoldchain.cn'
const TIME_OUT = 10 * 1000
 
/**
 * 创建axios实例
 */
const instance = axios.create({
    baseURL: BASE_URL,
    timeout: TIME_OUT
})
 
const errorHandle = (status: number, error:any): void => {
    // HTTP状态码判断
    switch (status) {
        case 401:
            return alert(`Error Code: ${status}, Message: ${error.msg || '登录失效,请重新登录'}`)
        case 403:
            return alert(`Error Code: ${status}, Message: ${error.msg || '你没有访问权限'}`)
        case 500:
            return alert(`Error Code: ${status}, Message: ${error.msg || '后台错误,请联系管理员'}`)
        case 502:
            return alert(`Error Code: ${status}, Message: ${error.msg || '平台环境异常'}`)
        default:
            alert(`Error Code: ${status}, Message: ${error.msg || '未知错误,请刷新重试'}`)
 
    }
}
 
// 前置拦截器(发起请求之前的拦截)
instance.interceptors.request.use(
    (response:any) =>{
        if (Session.get('token')) {
            response.headers.common['Authorization'] = 'Bearer '+ `${Session.get('token')}`
        }
        return response
    },
    (error) => Promise.reject(error)
)
 
// 后置拦截器(获取到响应时的拦截)
instance.interceptors.response.use(
    (res: AxiosResponse) => {
        if (String(res.status).indexOf('2') !== 0) {
            return {
                code: res.status,
                message: res.data.message || '请求异常,请刷新重试',
                result: false
            }
        }
        if (res.data.code===200){
            return res.data
        }
        else {
            ElMessage.error(res.data.message)
            return Promise.reject(instance.interceptors.response)
        }
    },
    (error: AxiosError) => {
        if (error && error.response) {
            // 请求已发出,但是不在2xx的范围
            errorHandle(error.response.status, error.response)
            return Promise.reject(error.response)
        }
        console.log('网络请求失败, 请刷新重试')
        return Promise.reject(error)
    }
)
 
export default instance