index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import axios from 'axios'
  2. import store from '@/store'
  3. import router from '@/router'
  4. import Vue from 'vue'
  5. const $axios = axios.create({
  6. // 5 分钟超时
  7. timeout: 300000,
  8. // 域名
  9. baseURL: process.env.VUE_APP_BASE_API,
  10. headers: {
  11. 'Content-Type': 'application/json; charset=UTF-8'
  12. }
  13. })
  14. Vue.prototype.$http = axios // 并发请求
  15. // 在全局请求和响应拦截器中添加请求状态
  16. const loading = null
  17. $axios.defaults.withCredentials = true
  18. // 请求拦截器
  19. $axios.interceptors.request.use(
  20. config => {
  21. const token = store.getters.token
  22. if (token) {
  23. // 在请求的 Authorization 首部添加 token
  24. config.headers.Authorization = 'Bearer ' + token
  25. }
  26. return config
  27. },
  28. error => {
  29. return Promise.reject(error)
  30. }
  31. )
  32. // 响应拦截器
  33. $axios.interceptors.response.use(
  34. response => {
  35. if (loading) {
  36. loading.close()
  37. }
  38. const code = response.status
  39. if ((code >= 200 && code < 300) || code === 304) {
  40. return Promise.resolve(response.data)
  41. } else {
  42. return Promise.reject(response)
  43. }
  44. },
  45. error => {
  46. if (loading) {
  47. loading.close()
  48. }
  49. if (error.response) {
  50. const statusCode = error.response.status
  51. switch (statusCode) {
  52. case 401:
  53. // 清除用户信息和 token 并跳转到登录页面
  54. store.dispatch('user/resetToken').then(() => {
  55. router.push('/login')
  56. }).catch(() => {
  57. })
  58. // store.commit('setUserInfo', null)
  59. // commit('RESET_STATE')
  60. /* store.user.userInfo = null
  61. store.user.token = null
  62. console.log(store.user)*/
  63. break
  64. case 404:
  65. console.error('网络请求不存在')
  66. break
  67. default:
  68. console.error(error.response)
  69. }
  70. return error.response
  71. } else {
  72. // 请求超时或者网络有问题
  73. if (error.message.includes('timeout')) {
  74. console.error('请求超时!请检查网络是否正常')
  75. } else {
  76. console.error(error.message)
  77. console.error('请求失败,请检查服务器是否已启动')
  78. }
  79. }
  80. return Promise.reject(error)
  81. }
  82. )
  83. // HTTP 请求
  84. export default {
  85. get(url, params) {
  86. return $axios({
  87. method: 'get',
  88. url,
  89. params
  90. })
  91. },
  92. post(url, data) {
  93. return $axios({
  94. method: 'post',
  95. url,
  96. data: JSON.stringify(data)
  97. })
  98. },
  99. put(url, data) {
  100. return $axios({
  101. method: 'put',
  102. url,
  103. data: JSON.stringify(data)
  104. })
  105. },
  106. delete(url, data) {
  107. return $axios({
  108. method: 'delete',
  109. url,
  110. data: JSON.stringify(data)
  111. })
  112. }
  113. }