axios.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import axios from 'axios'
  2. let reqCount = 0 // 请求计数器
  3. const isServer = typeof window === 'undefined'
  4. export default ({store, app, req}, inject) => {
  5. const service = axios.create({
  6. withCredentials: true,
  7. // Specify baseURL by where code runs.
  8. baseURL: process.server ? process.env.baseUrl : '/',
  9. maxRedirects: 0
  10. })
  11. service.interceptors.request.use(config => {
  12. reqCount++
  13. if (process.server) {
  14. if (req.headers.cookie) {
  15. config.headers.cookie = req.headers.cookie
  16. }
  17. config.headers['User-Agent'] = req.headers['user-agent']
  18. }
  19. if (!process.server) {
  20. document.getElementById('loading').setAttribute('class', 'loading in')
  21. }
  22. return config
  23. }, error => {
  24. return Promise.reject(error)
  25. })
  26. service.interceptors.response.use(response => {
  27. const cookies = response.headers['set-cookie']
  28. if (cookies && cookies.length) {
  29. for (let i = 0; i < cookies.length; i++) {
  30. if (cookies[i].indexOf('JSESSIONID') > -1) {
  31. const sessionId = cookies[i]
  32. const first = sessionId.indexOf(';')
  33. const second = sessionId.lastIndexOf(';')
  34. const newSessionId = sessionId.replace(sessionId.substring(first, second), '')
  35. store.commit('option/SET_SESSION_ID', newSessionId)
  36. break
  37. }
  38. }
  39. }
  40. if (--reqCount <= 0 && !process.server) {
  41. document.getElementById('loading').setAttribute('class', 'loading')
  42. }
  43. return response
  44. }, error => {
  45. if (--reqCount <= 0 && !process.server) {
  46. document.getElementById('loading').setAttribute('class', 'loading')
  47. }
  48. return Promise.reject(error)
  49. })
  50. inject('axios', service)
  51. }