request.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import axios from 'axios'
  2. import { Message, MessageBox } from 'element-ui'
  3. import store from '../store'
  4. import { getToken } from '@/utils/auth'
  5. // 创建axios实例
  6. const service = axios.create({
  7. baseURL: process.env.BASE_API, // api 的 base_url
  8. timeout: 5000 // 请求超时时间
  9. })
  10. // request拦截器
  11. service.interceptors.request.use(
  12. config => {
  13. if (store.getters.token) {
  14. config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  15. }
  16. return config
  17. },
  18. error => {
  19. // Do something with request error
  20. console.log(error) // for debug
  21. Promise.reject(error)
  22. }
  23. )
  24. // response 拦截器
  25. service.interceptors.response.use(
  26. response => {
  27. /**
  28. * code为非20000是抛错 可结合自己业务进行修改
  29. */
  30. const res = response.data
  31. if (res.code !== 20000) {
  32. Message({
  33. message: res.message,
  34. type: 'error',
  35. duration: 5 * 1000
  36. })
  37. // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;
  38. if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
  39. MessageBox.confirm(
  40. '你已被登出,可以取消继续留在该页面,或者重新登录',
  41. '确定登出',
  42. {
  43. confirmButtonText: '重新登录',
  44. cancelButtonText: '取消',
  45. type: 'warning'
  46. }
  47. ).then(() => {
  48. store.dispatch('FedLogOut').then(() => {
  49. location.reload() // 为了重新实例化vue-router对象 避免bug
  50. })
  51. })
  52. }
  53. return Promise.reject('error')
  54. } else {
  55. return response.data
  56. }
  57. },
  58. error => {
  59. console.log('err' + error) // for debug
  60. Message({
  61. message: error.message,
  62. type: 'error',
  63. duration: 5 * 1000
  64. })
  65. return Promise.reject(error)
  66. }
  67. )
  68. export default service