request.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import axios from 'axios'
  2. import { MessageBox, Message } from 'element-ui'
  3. import store from '@/store'
  4. import { getToken } from '@/utils/auth'
  5. import Cookies from 'js-cookie';
  6. //获取当前url
  7. const DoMainString = document.querySelector("html").getAttribute("domain");
  8. var URL = process.env.VUE_APP_BASE_API
  9. if (DoMainString) {
  10. URL = DoMainString
  11. }
  12. Cookies.set('url',URL)
  13. console.log(process.env.VUE_APP_BASE_API,'===========URL1111')
  14. console.log(URL,'===========URL')
  15. if(URL.indexOf('/')==0 && URL.length==1){
  16. URL= window.location.protocol + "//"+window.location.host+URL
  17. }
  18. const service = axios.create({
  19. baseURL: URL, // url = base url + request url
  20. withCredentials: true, // send cookies when cross-domain requests
  21. timeout: 60000 ,// request timeout
  22. })
  23. // request interceptor
  24. service.interceptors.request.use(
  25. config => {
  26. // do something before request is sent
  27. // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' //此处是增加的代码,设置请求头的类型
  28. if (process.env.VUE_APP_BASE_API !== '/dev-api') {
  29. config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
  30. config.withCredentials = false
  31. }
  32. if (store.getters.token) {
  33. // let each request carry token
  34. // ['Authorization'] is a custom headers key
  35. // please modify it according to the actual situation
  36. if (process.env.VUE_APP_BASE_API === '/dev-api') {
  37. config.headers['X-Token'] = getToken()
  38. } else {
  39. config.headers['token'] = getToken()
  40. }
  41. }
  42. return config
  43. },
  44. error => {
  45. // do something with request error
  46. console.log(error) // for debug
  47. return Promise.reject(error)
  48. }
  49. )
  50. // response interceptor
  51. service.interceptors.response.use(
  52. /**
  53. * If you want to get http information such as headers or status
  54. * Please return response => response
  55. */
  56. /**
  57. * Determine the request status by custom code
  58. * Here is just an example
  59. * You can also judge the status by HTTP Status Code
  60. */
  61. response => {
  62. const res = response.data
  63. // if the custom code is not 20000, it is judged as an error.
  64. if (res.code !== 200) {
  65. Message({
  66. // message: res.msg + res.code,
  67. message: '请求超时',
  68. type: 'error',
  69. duration: 5 * 1000
  70. })
  71. // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
  72. if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
  73. // to re-login
  74. MessageBox.confirm('你已经注销登陆,你可以取消或重新登陆', '确认注销', {
  75. confirmButtonText: '重新登陆',
  76. cancelButtonText: '取消',
  77. type: 'warning'
  78. }).then(() => {
  79. store.dispatch('user/resetToken').then(() => {
  80. location.reload()
  81. })
  82. })
  83. }
  84. if (res.code === 20002) {
  85. store.dispatch('user/resetToken').then(() => {
  86. location.reload()
  87. })
  88. }
  89. if (res.code === undefined) {
  90. return res
  91. } else {
  92. return Promise.reject(new Error(res.message || 'Error'))
  93. }
  94. } else {
  95. return res
  96. }
  97. },
  98. error => {
  99. console.log('err' + error) // for debug
  100. let config = error.config
  101. if (!config) {
  102. Message({ message: error.message, type: 'error', duration: 5 * 1000 })
  103. return Promise.reject(error)
  104. }
  105. console.log('config==>', config) // for debug
  106. console.log('config.__retryCount==>', config.__retryCount) // for debug
  107. // 设置请求超时次数
  108. config.__retryCount = config.__retryCount || 0
  109. if (config.__retryCount >= 3) {
  110. // Message({ message:error.message, type: 'error', duration: 5 * 1000 })
  111. Message({ message:'请求超时', type: 'error', duration: 5 * 1000 })
  112. // Message.error((error && error.data && error.data.msg) || '请求超时')
  113. return Promise.reject(error)
  114. }
  115. config.__retryCount += 1
  116. let backoff = new Promise((resolve) => {
  117. setTimeout(() => {
  118. resolve()
  119. }, config.retryDelay || 1000)
  120. })
  121. return backoff.then(() => {
  122. return service(config)
  123. })
  124. // Message({
  125. // message: error.message,
  126. // type: 'error',
  127. // duration: 5 * 1000
  128. // })
  129. // return Promise.reject(error)
  130. }
  131. )
  132. export default service