request.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import store from '@/store'
  4. import { VueAxios } from './axios'
  5. import notification from 'ant-design-vue/es/notification'
  6. import { ACCESS_TOKEN } from '@/store/mutation-types'
  7. // 创建 axios 实例
  8. const service = axios.create({
  9. baseURL: '/api', // api base_url
  10. timeout: 6000 // 请求超时时间
  11. })
  12. const err = (error) => {
  13. if (error.response) {
  14. const data = error.response.data
  15. const token = Vue.ls.get(ACCESS_TOKEN)
  16. if (error.response.status === 403) {
  17. notification.error({ message: 'Forbidden', description: data.message })
  18. }
  19. if (error.response.status === 401) {
  20. notification.error({ message: 'Unauthorized', description: 'Authorization verification failed' })
  21. if (token) {
  22. store.dispatch('Logout').then(() => {
  23. setTimeout(() => {
  24. window.location.reload()
  25. }, 1500)
  26. })
  27. }
  28. }
  29. }
  30. return Promise.reject(error)
  31. }
  32. // request interceptor
  33. service.interceptors.request.use(config => {
  34. const token = Vue.ls.get(ACCESS_TOKEN)
  35. if (token) {
  36. config.headers[ 'Access-Token' ] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
  37. }
  38. return config
  39. }, err)
  40. // response interceptor
  41. service.interceptors.response.use((response) => {
  42. return response.data
  43. }, err)
  44. const installer = {
  45. vm: {},
  46. install (Vue, router = {}) {
  47. Vue.use(VueAxios, router, service)
  48. }
  49. }
  50. export {
  51. installer as VueAxios,
  52. service as axios
  53. }