import axios from ‘axios’
import router from ‘…/router’
import { Message } from ‘element-ui’
const service = axios.create ({
//设置过期时间
// timeout: 6000,
baseURL:process.env.VUE_APP_ENV
});
//根据命令来选择开发环境
if (process.env.NODE_ENV === ‘production’) {
if (process.env.VUE_APP_ENV === ‘pro’) {
//production 生产环境
service.defaults.baseURL = ‘’
} else {
//test 测试环境
service.defaults.baseURL =’’
}
} else {
// service.defaults.baseURL = ‘’
}
service.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded’;
//请求拦截,用于处理在请求前的操作
// let loading = null;
service.interceptors.request.use(config => {
//请求需要展示加载框
//loading = loading.service({
//text:‘正在加载中…’
//})
const token = sessionStorage.getItem(‘token’);
if(token) {
config.headers[‘Authorization’] = token
}
return config
}, (error) => {
return Promise.reject(error)
})
/* 请求响应拦截
用于处理需要在请求返回后的操作 */
let count = 0
service.interceptors.response.use(response => {
// 请求关闭后加载框
// if(loading) {
// loading.close()
// }
const responseCode = response.status
// 如果返回的状态码为200,说明接口成功,可以正常拿到数据
//否则的话就抛出错误
if (responseCode === 200) {
return Promise.resolve (response.data)
} else {
return Promise.reject(response)
}
}, error => {
//请求响应后关闭加载框
// if (loading) {
// loading.close()
// }
//断网或者请求超时状态
if(!error.response) {
//请求超时状态
if (error.message.include(‘timeout’)) {
console.log(‘超时了’)
Message.error(‘请求超时,请检查网络是否连接正常’)
} else {
//可以展示断网插件
console.log(‘断网了’)
Message.error(‘请求失败,请检查网络是否已连接’)
}
return
}
//服务器返回不是 2开头的情况,会进入这个回调
//可以根据后端返回的状态码进行不同的操作
const responseCode = error.response.status
switch (responseCode) {
//401:未登录
case 401:
if (count === 0) {
Message({
message:'该账号登录超时或者已经在别处登录',
type:'error'
})
}
count++
//跳转登录页面
router.replace({
path:'/',
// query: {
// redirect:router.currentRoute.fullPath
// }
})
break
// 其他错误,直接抛出错误提示
default:
Message({
message:'服务器正忙,请稍后再试',
type:'error'
})
}
return Promise.reject(error)
})
export default service;