You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.4 KiB

4 months ago
4 months ago
4 months ago
4 months ago
  1. import axios from 'axios'
  2. import { ElMessage } from 'element-plus'
  3. import { config } from '@/config'
  4. const ERROR_MESSAGES = {
  5. badRequest: '请求错误(400)',
  6. unauthorized: '未授权,请登录(401)',
  7. forbidden: '拒绝访问(403)',
  8. notFound: `请求地址出错: ${'[具体 URL 将在这里被替换]'}`,
  9. methodNotAllowed: '请求方法未允许(405)',
  10. requestTimeout: '请求超时(408)',
  11. internalServerError: '服务器内部错误(500)',
  12. notImplemented: '服务未实现(501)',
  13. badGateway: '网络错误(502)',
  14. serviceUnavailable: '服务不可用(503)',
  15. gatewayTimeout: '网络超时(504)',
  16. httpVersionNotSupported: 'HTTP 版本不受支持(505)',
  17. defaultConnectionError: '连接错误: [原始错误消息]',
  18. networkError: '网络异常,请检查后重试!',
  19. serverFailure: '连接到服务器失败,请联系管理员'
  20. }
  21. const service = axios.create({
  22. baseURL: '', // url = base url + request url+
  23. // timeout: 50000,
  24. withCredentials: false // send cookies when cross-domain requests
  25. // headers: {
  26. // // clear cors
  27. // 'Cache-Control': 'no-cache',
  28. // Pragma: 'no-cache'
  29. // }
  30. })
  31. const setErrorMsg = (error) => {
  32. if (error && error.response) {
  33. switch (error.response.status) {
  34. case 400:
  35. error.message = ERROR_MESSAGES.badRequest
  36. break
  37. case 401:
  38. error.message = ERROR_MESSAGES.unauthorized
  39. break
  40. case 403:
  41. error.message = ERROR_MESSAGES.forbidden
  42. break
  43. case 404:
  44. error.message = ERROR_MESSAGES.notFound.replace(
  45. '[具体 URL 将在这里被替换]',
  46. error.response.config.url
  47. )
  48. break
  49. case 405:
  50. error.message = ERROR_MESSAGES.methodNotAllowed
  51. break
  52. case 408:
  53. error.message = ERROR_MESSAGES.requestTimeout
  54. break
  55. case 500:
  56. error.message = ERROR_MESSAGES.internalServerError
  57. break
  58. case 501:
  59. error.message = ERROR_MESSAGES.notImplemented
  60. break
  61. case 502:
  62. error.message = ERROR_MESSAGES.badGateway
  63. break
  64. case 503:
  65. error.message = ERROR_MESSAGES.serviceUnavailable
  66. break
  67. case 504:
  68. error.message = ERROR_MESSAGES.gatewayTimeout
  69. break
  70. case 505:
  71. error.message = ERROR_MESSAGES.httpVersionNotSupported
  72. break
  73. default:
  74. error.message = ERROR_MESSAGES.defaultConnectionError.replace(
  75. '[原始错误消息]',
  76. error.message
  77. )
  78. }
  79. } else {
  80. if (error.message === 'Network Error') {
  81. error.message = ERROR_MESSAGES.networkError
  82. } else {
  83. error.message = ERROR_MESSAGES.serverFailure
  84. }
  85. }
  86. return error.message
  87. }
  88. // Request interceptors
  89. service.interceptors.request.use(
  90. (config) => {
  91. // 在此处添加请求头等,如添加 token
  92. // if (store.state.token) {
  93. // config.headers['Authorization'] = `Bearer ${store.state.token}`
  94. // }
  95. return config
  96. },
  97. (error) => {
  98. return Promise.reject(error)
  99. }
  100. )
  101. // Response interceptors
  102. service.interceptors.response.use(
  103. async (response) => {
  104. // await new Promise(resovle => setTimeout(resovle, 3000));
  105. // if (response.config.loadingInstance) {
  106. // response.config.loadingInstance.close();
  107. // }
  108. const res = response.data
  109. if (res.code !== 200) {
  110. const errorMsg = res.msg || 'Unkonw error'
  111. // ElMessage.error(errorMsg)
  112. // return Promise.reject(new Error(res.msg || 'Error'))
  113. return response.data
  114. } else {
  115. return response.data
  116. }
  117. },
  118. (error) => {
  119. const errorMessage = setErrorMsg(error)
  120. ElMessage.error(errorMessage)
  121. return Promise.reject(error)
  122. }
  123. )
  124. export default service