zhanghua
2022-11-04 5f33acc112f6247ec487406800091eb4f47ce89a
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
// URL 记录器
import Vue from 'vue'
import urlRecorder from './url-recorder'
import {
  tryHideFullScreenLoading
} from '../utils/loading'
/**
 * 对成功返回的请求回包进行数据预处理
 * @param response
 * @returns {Promise}
 */
export function handleResponseSuccess(response) {
  tryHideFullScreenLoading()
  urlRecorder.remove(response.config)
  const result = response.data
 
  // return result.content
  if (result.code === 200) {
    return result.data || result.content
  } else if (result.code && result.code !== 0) {
    return handleError(response.config, result)
  } else if (result === '') {
    Vue.prototype.$message({
      type: 'error',
      message: '服务内部错误'
    })
    return result
  } else {
    // 来自其它服务器的请求
    return result
  }
}
 
/**
 * 对发送失败的请求进行数据预处理,将error对象封装为统一的形式
 * @param error
 * @returns {Promise}
 */
export function handleResponseFail(error) {
  tryHideFullScreenLoading()
  urlRecorder.remove(error.config)
  let result
  if (error.response) {
    // 请求已发送,响应中返回了非2xx的错误码,包括304等
    result = {
      data: error.response.data,
      msg: error.response.statusText
    }
  } else if (error.request) {
    // 请求没有发送成功时的错误
    result = {
      data: error.request,
      msg: error.message
    }
  } else {
    // 设置请求时出错
    result = {
      msg: error.message
    }
  }
 
  return handleError(error.config, result)
}
 
/**
 * 统一的异常对象封装逻辑,在这里抛出异常
 * @param {object} requestConfig 发请求时传入axios的配置信息对象
 * @param {object|Error} result 请求回包对象,或异常信息
 * @param {object} result.content
 * @param {number} result.code
 * @param {string} result.msg
 * @returns {Promise}
 */
export function handleError(requestConfig, result) {
  // 必须是Error对象,否则throw时vuex要报warning
  // let err
  // if (result instanceof Error) {
  //   err = result
  // } else {
  //   err = new Error(result.msg)
  //   err.content = result.content
  //   err.code = result.code
  //   err.msg = result.msg
  // }
  if (requestConfig && requestConfig.errorHandler) {
    result.url = requestConfig.url
    requestConfig.errorHandler(result)
    result.processed = true
  }
  return Promise.reject(result)
}
 
/**
 * 请求拦截器,添加用户token
 */
export function handleRequest(config) {
 
  const token = sessionStorage.getItem('token');
  const tokenHead = sessionStorage.getItem('tokenHead');
  if (token && tokenHead) {
    // 这里经常搭配token使用,将token值配置到tokenkey中,将tokenkey放在请求头中
    config.headers['Authorization'] = tokenHead + token
  }
  return config
}