axiosPlugin.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /**
  2. * @file Axios的Vue插件(添加全局请求/响应拦截器)
  3. */
  4. import {DEVICE_TYPE, REQUEST_URL} from './config'
  5. import axios from 'axios'
  6. const axiosObj = axios.create({
  7. baseURL: REQUEST_URL,
  8. headers: {
  9. 'Content-Type': 'application/json;charset=UTF-8',
  10. 'Device-Type': DEVICE_TYPE,
  11. 'Suppress-Response-Code': '1',
  12. },
  13. })
  14. // 拦截request,设置全局请求为ajax请求
  15. axiosObj.interceptors.request.use((config) => {
  16. // config.headers['X-Requested-With'] = 'XMLHttpRequest';
  17. // config.headers['request-device'] = 'app';
  18. return config
  19. })
  20. // 拦截响应response,并做一些错误处理
  21. axiosObj.interceptors.response.use((response) => {
  22. const responseData = response.data
  23. const data = responseData.data
  24. if (responseData.success === false) {
  25. const err = new Error(data.message)
  26. err.data = data
  27. err.message = data.message
  28. err.response = response
  29. throw err
  30. } else {
  31. return data
  32. }
  33. }, (err) => { // 这里是返回状态码不为200时候的错误处理
  34. if (err && err.response) {
  35. switch (err.response.status) {
  36. case 400:
  37. err.message = '请求错误'
  38. break
  39. case 401:
  40. err.message = '未授权,请登录'
  41. break
  42. case 403:
  43. err.message = '拒绝访问'
  44. break
  45. case 404:
  46. err.message = `请求地址出错: ${err.response.config.url}`
  47. break
  48. case 408:
  49. err.message = '请求超时'
  50. break
  51. case 500:
  52. err.message = '服务器内部错误'
  53. break
  54. case 501:
  55. err.message = '服务未实现'
  56. break
  57. case 502:
  58. err.message = '网关错误'
  59. break
  60. case 503:
  61. err.message = '服务不可用'
  62. break
  63. case 504:
  64. err.message = '网关超时'
  65. break
  66. case 505:
  67. err.message = 'HTTP版本不受支持'
  68. break
  69. default:
  70. }
  71. }
  72. return Promise.reject(err)
  73. })
  74. export default axiosObj