request.js 1.44 KB
import axios from 'axios'
import store from '@/store'
import { Toast } from 'vant'
// create an axios instance
const service = axios.create({
  baseURL: process.env.BASE_URL, // url = base url + request url
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request拦截器 request interceptor
service.interceptors.request.use(
  config => {
    // 不传递默认开启loading
    if (!config.hideloading) {
      // loading
      Toast.loading({
        forbidClick: true
      })
    }
    if (store.getters.token) {
      config.headers['X-Token'] = ''
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
// respone拦截器
service.interceptors.response.use(
  response => {
    Toast.clear()
    // 如果是数据流
    if (response.config.responseType === 'arraybuffer') {
      return response.data
    } else {
      const res = response.data
      if (res.status !== 200) {
        // 登录超时,重新登录
        if (res.status === 401) {
          store.dispatch('FedLogOut').then(() => {
            location.reload()
          })
        }
        return Promise.reject(res || 'error')
      } else {
        return Promise.resolve(res)
      }
    }
  },
  error => {
    Toast.clear()
    console.log('err' + error) // for debug
    return Promise.reject(error)
  }
)

export default service