Blame view

src/http/axios.js 3.01 KB
e7ab2c09a   alexYang   权限部分
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
  import axios from 'axios';
  import config from './config';
  import Cookies from "js-cookie";
  import router from '@/router'
  
  export default function $axios(options) {
    return new Promise((resolve, reject) => {
      const instance = axios.create({
        baseURL: config.baseUrl,
        headers: config.headers,
        timeout: config.timeout,
        withCredentials: config.withCredentials
      })
      // request 请求拦截器
      instance.interceptors.request.use(
        config => {
          let token = Cookies.get('token')
          // 发送请求时携带token
          if (token) {
            config.headers.token = token
          } else {
            // 重定向到登录页面
            router.push('/login')
          }
          return config
        },
        error => {
          // 请求发生错误时
          console.log('request:', error)
          // 判断请求超时
          if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
            console.log('timeout请求超时')
          }
          // 需要重定向到错误页面
          const errorInfo = error.response
          console.log(errorInfo)
          if (errorInfo) {
            error = errorInfo.data  // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
            const errorStatus = errorInfo.status; // 404 403 500 ...
            router.push({
              path: `/error/${errorStatus}`
            })
          }
          return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
        }
      )
      
      // response 响应拦截器
      instance.interceptors.response.use(
        response => {
          return response.data
        },
        err => {
          if (err && err.response) {
            switch (err.response.status) {
              case 400:
                err.message = '请求错误'
                break
              case 401:
                err.message = '未授权,请登录'
                break
              case 403:
                err.message = '拒绝访问'
                break
              case 404:
                err.message = `请求地址出错: ${err.response.config.url}`
                break
              case 408:
                err.message = '请求超时'
                break
              case 500:
                err.message = '服务器内部错误'
                break
              case 501:
                err.message = '服务未实现'
                break
              case 502:
                err.message = '网关错误'
                break
              case 503:
                err.message = '服务不可用'
                break
              case 504:
                err.message = '网关超时'
                break
              case 505:
                err.message = 'HTTP版本不受支持'
                break
              default:
            }
          }
          console.error(err)
          return Promise.reject(err) // 返回接口返回的错误信息
        }
      )
      // 请求处理
      instance(options).then(res => {
        resolve(res)
        return false
      }).catch(error => {
        reject(error)
      })
    })
  }