request.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import axios from 'axios'
  2. import {
  3. MessageBox,
  4. Message
  5. } from 'element-ui'
  6. import store from '@/store'
  7. import {
  8. getToken
  9. } from '@/utils/auth'
  10. import router from '@/router'
  11. // create an axios instance
  12. const service = axios.create({
  13. baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  14. withCredentials: false, // send cookies when cross-domain requests
  15. timeout: 30000 // request timeout
  16. })
  17. // request interceptor
  18. service.interceptors.request.use(
  19. config => {
  20. // do something before request is sent
  21. var token = getToken()
  22. if (token) {
  23. config.headers['Authorization'] = token // 让每个请求携带自定义token 请根据实际情况自行修改
  24. }
  25. return config
  26. },
  27. error => {
  28. // do something with request error
  29. return Promise.reject(error)
  30. }
  31. )
  32. // response interceptor
  33. service.interceptors.response.use(
  34. /**
  35. * If you want to get http information such as headers or status
  36. * Please return response => response
  37. */
  38. /**
  39. * Determine the request status by custom code
  40. * Here is just an example
  41. * You can also judge the status by HTTP Status Code
  42. */
  43. response => {
  44. const res = response.data
  45. if (response.headers.token) {
  46. //如果后台通过header返回token,说明token已经更新,则更新客户端本地token
  47. store.dispatch('user/updateToken', {
  48. token: response.headers.token
  49. })
  50. }
  51. // if the custom code is not 200, it is judged as an error.
  52. if (res.code !== 200) {
  53. Message({
  54. message: res.msg || 'error',
  55. type: 'error',
  56. duration: 5 * 1000
  57. })
  58. // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
  59. if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
  60. // to re-login
  61. MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again',
  62. 'Confirm logout', {
  63. confirmButtonText: 'Re-Login',
  64. cancelButtonText: 'Cancel',
  65. type: 'warning'
  66. }).then(() => {
  67. store.dispatch('user/resetToken').then(() => {
  68. location.reload()
  69. })
  70. })
  71. }
  72. return Promise.reject(res)
  73. } else {
  74. return res
  75. }
  76. },
  77. error => {
  78. if (error.response.status === 401) {
  79. store.dispatch('user/logout').then(() => {
  80. router.replace({
  81. path: '/login',
  82. query: {
  83. redirect: router.currentRoute.path
  84. }
  85. })
  86. })
  87. return
  88. }
  89. let errorMsg = ''
  90. try {
  91. errorMsg = error.response.data.errors[0].defaultMessage
  92. } catch (e) {
  93. errorMsg = error.response.data.message
  94. }
  95. Message({
  96. message: errorMsg,
  97. type: 'error',
  98. duration: 5 * 1000
  99. })
  100. return Promise.reject(error)
  101. }
  102. )
  103. export default service