axios.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import store from '~store'
  4. const service = axios.create({
  5. withCredentials: true,
  6. baseUrl: '/'
  7. })
  8. let reqCount = 0 // 请求计数器
  9. const isServer = typeof window === 'undefined'
  10. service.interceptors.request.use(config => {
  11. // is server render, use ${baseUrl} directly rather than ${proxyUrl}
  12. config.url = config.url || '/'
  13. reqCount++
  14. if (isServer) {
  15. if (config.url.indexOf('/inquiry') === 0) {
  16. config.url = process.env.commonUrl + config.url
  17. } else if (config.url.indexOf('/productsuer') === 0) {
  18. config.url = process.env.materialUrl + config.url
  19. } else if (config.url.indexOf('/cmsApi') === 0) {
  20. config.url = process.env.cmsUrl + config.url
  21. } else if (config.url.indexOf('/messages') === 0) {
  22. config.url = process.env.messageUrl + config.url
  23. } else {
  24. config.url = process.env.baseUrl + config.url
  25. }
  26. // console.log(config.url)
  27. // config.headers.cookie = store.state.option.cookies + '; ' + store.state.option.sessionId
  28. // config.headers['User-Agent']
  29. } else {
  30. document.getElementById('loading').setAttribute('class', 'loading in')
  31. }
  32. return config
  33. }, error => {
  34. return Promise.reject(error)
  35. })
  36. service.interceptors.response.use(response => {
  37. const cookies = response.headers['set-cookie']
  38. if (cookies && cookies.length) {
  39. for (let i = 0; i < cookies.length; i++) {
  40. if (cookies[i].indexOf('JSESSIONID') > -1) {
  41. const sessionId = cookies[i]
  42. const first = sessionId.indexOf(';')
  43. const second = sessionId.lastIndexOf(';')
  44. const newSessionId = sessionId.replace(sessionId.substring(first, second), '')
  45. store.commit('option/SET_SESSION_ID', newSessionId)
  46. break
  47. }
  48. }
  49. }
  50. if (--reqCount <= 0 && !isServer) {
  51. document.getElementById('loading').setAttribute('class', 'loading')
  52. }
  53. return response
  54. }, error => {
  55. if (--reqCount <= 0 && !isServer) {
  56. document.getElementById('loading').setAttribute('class', 'loading')
  57. }
  58. return Promise.reject(error)
  59. })
  60. Vue.prototype.$http = service
  61. export default service