http.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import axios from 'axios'
  2. export default {
  3. install (Vue) {
  4. const http = axios.create({
  5. baseURL: process.env.API_URL.default,
  6. timeout: 60000,
  7. })
  8. http.interceptors.request.use(
  9. config => {
  10. const [ url, version ] = config.url.split(':').reverse()
  11. if (version) {
  12. config.baseURL = process.env.API_URL[version]
  13. config.url = url
  14. }
  15. const token = window.localStorage.getItem('token')
  16. if (token) config.headers['Authorization'] = token
  17. return config
  18. },
  19. error => {
  20. return Promise.reject(error)
  21. }
  22. )
  23. http.interceptors.response.use(
  24. response => {
  25. const { status, data } = response
  26. const errorTypes = {
  27. 401: 'GLOBAL_AUTH_ERROR',
  28. 500: 'GLOBAL_ERROR',
  29. }
  30. if (data.code in errorTypes) {
  31. const errorData = { status, message: data.message }
  32. Vue.hub.$emit(errorTypes[data.code], errorData)
  33. return Promise.reject(errorData)
  34. }
  35. return data
  36. },
  37. error => {
  38. // console.log(JSON.parse(JSON.stringify(error)))
  39. const errorData = { message: '网络超时,请重试' }
  40. if (error.response) {
  41. errorData.status = error.response.status
  42. errorData.message = error.response.data.message
  43. }
  44. Vue.hub.$emit('GLOBAL_ERROR', errorData)
  45. return Promise.reject(errorData)
  46. }
  47. )
  48. Vue.prototype.$http = http
  49. Vue.http = http
  50. },
  51. }