import axios from 'axios';
import qs from 'qs';
import { MessageBox } from 'element-ui';
import router from 'router/index';
let hasConfirm = false;
// axios 配置
axios.defaults.withCredentials = true;
axios.defaults.timeout = 120000;
// 根据实际情况,调整为服务器地址
axios.defaults.baseURL = '/api';
// http request 拦截器
axios.interceptors.request.use(
config => {
let token = sessionStorage.getItem('token');
if (token) {
config.headers.Authorization = token;
}
else {
// 重定向到登录页面
router.push('/login')
}
return config;
},
err => {
return Promise.reject(err);
}
);
// http response 拦截器
axios.interceptors.response.use(
response => {
return response;
},
error => {
let response = error.response;
let customRsp = {
code: 500
};
if (response) {
switch (response.status) {
case 401: // 未登录
router.push({ path: '/login' });
customRsp.code = 200;
break;
case 400:
customRsp.msg = '服务器不理解的请求语法';
break;
case 404:
customRsp.msg = '网络请求不存在,请联系管理员';
break;
case 500:
customRsp.msg = '服务器内部异常,请联系管理员';
break;
case 502:
customRsp.msg = '服务器网络异常,请联系管理员';
break;
case 504:
customRsp.msg = '服务器网关请求超时,请联系管理员';
break;
}
}
return Promise.reject(customRsp); // 返回接口返回的错误信息
}
);
function checkStatus(response) {
return new Promise((resolve, reject) => {
if (response.status === 200) {
if (response.data.code === 401 && !hasConfirm) {
hasConfirm = true;
MessageBox.confirm('登陆超时是否重新登录?', '提示', {
distinguishCancelAndClose: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
sessionStorage.removeItem('token');
hasConfirm = false;
router.push({ path: '/login' });
window.location.reload();
}).catch(() => {
hasConfirm = false;
});
}
if (response.data.code) {
if (response.data.code == 200) {
resolve(response.data);
} else if (response.data.code == 401) { } else {
reject(response.data);
}
} else {
if (response.config.responseType == 'blob') {
resolve(response);
} else {
resolve(response.data);
}
}
} else {
reject(response.data);
}
});
}
export default {
post(url, data) {
let obj = data;
return axios({
method: 'post',
url,
data: qs.stringify(obj),
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Authorization': sessionStorage.getItem('token')
}
}).then(checkStatus);
},
postForJson(url, data) {
return axios({
method: 'post',
url,
data: JSON.stringify(data),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': sessionStorage.getItem('token')
}
}).then(checkStatus);
},
get(url, params) {
let obj = params;
let newUrl = url + '?t=' + Date.now();
return axios({
method: 'get',
url: newUrl,
params: obj,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': sessionStorage.getItem('token')
}
}).then(checkStatus);
},
put(url, params) {
let obj = params;
return axios({
method: 'put',
url,
params: obj,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': sessionStorage.getItem('token')
}
}).then(checkStatus);
},
delete(url, params) {
let obj = params;
return axios({
method: 'delete',
url,
params: obj,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': sessionStorage.getItem('token')
}
}).then(checkStatus);
}
};
axios接口
最新推荐文章于 2024-04-02 03:51:01 发布