import axios from 'axios' import router from '@/router' import { Toast } from 'vant' // 根据环境不同引入不同api地址 import { baseApi } from '@/config' // create an axios instance const service = axios.create({ baseURL: baseApi, // url = base api url + request url withCredentials: false, // send cookies when cross-domain requests timeout: 15000 // request timeout }) let loading; // request拦截器 service.interceptors.request.use( config => { // 不传递默认开启loading if (!config.hideLoading) { // loading loading = Toast.loading({ forbidClick: true }) } const token = sessionStorage.getItem('access_token'); if (token) { config.headers['Authorization'] = 'Bearer ' + token; } return config }, error => { // do something with request error console.log(error) // for debug return Promise.reject(error) } ) let success = response => { if (loading) Toast.clear(); // 二进制数据则直接返回 if (response.request.responseType === 'blob' || response.request.responseType === 'arraybuffer') { return response.data } let res = response.data; if(res.code === 200){ return res; } if (res.code === 401) { Toast.fail(res.msg); sessionStorage.clear(); router.push('/login'); return Promise.reject(res.msg); } if (res.code === 500) { Toast.fail('请求错误'); return Promise.reject(res.msg); } Toast.fail(res.msg); return Promise.reject(res.msg); } let error = error => { if (loading) Toast.clear(); console.log('err' + error) Toast.fail('请求异常,请稍后重试'); return Promise.reject(error) } // respone拦截器 service.interceptors.response.use(success,error); export default service