request.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import axios from 'axios'
  2. import store from '@/store'
  3. import Vue from 'vue'
  4. import router from '@/router'
  5. import { getAccessToken, removeAll } from '@/utils/auth'
  6. const instance = axios.create({
  7. // 域名
  8. baseURL: process.env.VUE_APP_SERVER_URL,
  9. headers: {
  10. 'Content-Type': 'application/json; charset=UTF-8'
  11. },
  12. // 5 分钟超时
  13. timeout: 300000,
  14. // 允许携带 cookie
  15. withCredentials: true
  16. })
  17. // 并发请求
  18. Vue.prototype.$http = axios
  19. // 在全局请求和响应拦截器中添加请求状态
  20. const loading = null
  21. // 请求拦截器
  22. instance.interceptors.request.use(config => {
  23. // const token = store.getters.token
  24. const token = getAccessToken()
  25. if (token) {
  26. // 在请求的 Authorization 首部添加 token
  27. config.headers.Authorization = 'Bearer ' + token
  28. }
  29. return config
  30. }, error => {
  31. return Promise.reject(error)
  32. })
  33. // 响应拦截器
  34. instance.interceptors.response.use(
  35. response => {
  36. if (loading) {
  37. loading.close()
  38. }
  39. const code = response.status
  40. if ((code >= 200 && code < 300) || code === 304) {
  41. return Promise.resolve(response.data)
  42. } else {
  43. return Promise.reject(response)
  44. }
  45. },
  46. error => {
  47. if (loading) {
  48. loading.close()
  49. }
  50. if (error.response) {
  51. switch (error.response.status) {
  52. case 401:
  53. // 返回 401 清除token信息并跳转到登陆页面
  54. console.log('401 错误')
  55. Vue.$cookies.remove('token')
  56. store.commit('USER_LOGOUT')
  57. store.commit('delToken')
  58. removeAll()
  59. router.replace({
  60. path: '/login',
  61. query: {
  62. redirect: router.currentRoute.fullPath
  63. }
  64. })
  65. break
  66. case 404:
  67. console.log('404 错误')
  68. break
  69. default:
  70. console.log(error.message)
  71. }
  72. } else {
  73. // 请求超时或者网络有问题
  74. if (error.message.includes('timeout')) {
  75. console.log(error.message)
  76. } else {
  77. console.log(error.message)
  78. }
  79. }
  80. return Promise.reject(error)
  81. }
  82. )
  83. // HTTP 请求
  84. export function post(url, data) {
  85. return instance({
  86. method: 'post',
  87. url,
  88. data: JSON.stringify(data)
  89. })
  90. }
  91. export function postForm(url, formData) {
  92. return instance({
  93. method: 'post',
  94. url,
  95. data: formData
  96. })
  97. }
  98. export function put(url, data) {
  99. return instance({
  100. method: 'put',
  101. url,
  102. data: JSON.stringify(data)
  103. })
  104. }
  105. export function delete0(url, data) {
  106. return instance({
  107. method: 'delete',
  108. url,
  109. data: JSON.stringify(data)
  110. })
  111. }
  112. export function get(url, params) {
  113. return instance({
  114. method: 'get',
  115. url,
  116. params
  117. })
  118. }