request.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import axios from 'axios'
  2. import store from '@/store'
  3. import Vue from 'vue'
  4. import router from '@/router'
  5. import { getAccessToken, getBrowserFingerprint, 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. if (Vue.$cookies.get('fp') === null) {
  30. getBrowserFingerprint()
  31. }
  32. return config
  33. }, error => {
  34. return Promise.reject(error)
  35. })
  36. // 响应拦截器
  37. instance.interceptors.response.use(
  38. response => {
  39. if (loading) {
  40. loading.close()
  41. }
  42. const code = response.status
  43. if ((code >= 200 && code < 300) || code === 304) {
  44. return Promise.resolve(response.data)
  45. } else {
  46. return Promise.reject(response)
  47. }
  48. },
  49. error => {
  50. if (loading) {
  51. loading.close()
  52. }
  53. if (error.response) {
  54. switch (error.response.status) {
  55. case 401:
  56. // 返回 401 清除token信息并跳转到登陆页面
  57. console.log('401 错误')
  58. Vue.$cookies.remove('token')
  59. store.commit('USER_LOGOUT')
  60. store.commit('delToken')
  61. removeAll()
  62. router.replace({
  63. path: '/login',
  64. query: {
  65. redirect: router.currentRoute.fullPath
  66. }
  67. })
  68. break
  69. case 404:
  70. console.log('404 错误')
  71. break
  72. default:
  73. console.log(error.message)
  74. }
  75. } else {
  76. // 请求超时或者网络有问题
  77. if (error.message.includes('timeout')) {
  78. console.log(error.message)
  79. } else {
  80. console.log(error.message)
  81. }
  82. }
  83. return Promise.reject(error)
  84. }
  85. )
  86. // HTTP 请求
  87. export function post(url, data) {
  88. return instance({
  89. method: 'post',
  90. url,
  91. data: JSON.stringify(data)
  92. })
  93. }
  94. export function postForm(url, formData) {
  95. return instance({
  96. method: 'post',
  97. url,
  98. data: formData
  99. })
  100. }
  101. export function put(url, data) {
  102. return instance({
  103. method: 'put',
  104. url,
  105. data: JSON.stringify(data)
  106. })
  107. }
  108. export function delete0(url, data) {
  109. return instance({
  110. method: 'delete',
  111. url,
  112. data: JSON.stringify(data)
  113. })
  114. }
  115. export function get(url, params) {
  116. return instance({
  117. method: 'get',
  118. url,
  119. params
  120. })
  121. }