request.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import axios from 'axios'
  2. import store from '@/store'
  3. import qs from 'qs'
  4. import { Toast } from 'vant'
  5. // 根据环境不同引入不同api地址
  6. import { baseApi } from '@/config'
  7. // create an axios instance
  8. const service = axios.create({
  9. baseURL: baseApi, // url = base api url + request url
  10. withCredentials: true // send cookies when cross-domain requests
  11. })
  12. // request拦截器 request interceptor
  13. service.interceptors.request.use(
  14. config => {
  15. // 不传递默认开启loading
  16. if (!config.hideloading) {
  17. // loading
  18. Toast.loading({
  19. forbidClick: true
  20. })
  21. }
  22. if (config.method === 'post') {
  23. config.data = qs.stringify(config.data) // 序列化post 参数
  24. }
  25. if (store.getters.token) {
  26. config.headers['X-Token'] = ''
  27. }
  28. return config
  29. },
  30. error => {
  31. // do something with request error
  32. console.log(error) // for debug
  33. return Promise.reject(error)
  34. }
  35. )
  36. // respone拦截器
  37. service.interceptors.response.use(
  38. response => {
  39. Toast.clear()
  40. const res = response.data
  41. if (res.status && res.status !== 200) {
  42. // 登录超时,重新登录
  43. if (res.status === 401) {
  44. store.dispatch('FedLogOut').then(() => {
  45. location.reload()
  46. })
  47. }
  48. return Promise.reject(res || 'error')
  49. } else {
  50. return Promise.resolve(res)
  51. }
  52. },
  53. error => {
  54. Toast.clear()
  55. console.log('err' + error) // for debug
  56. return Promise.reject(error)
  57. }
  58. )
  59. export default service