import axios from "axios"; //axios二次封装
import { Message } from "element-ui"; //引入element提示框
//简单封装一下提示框
const messbox = (txt, time = 1000) => {
Message({
showClose: true,
message: txt,
type: "error",
duration: time
});
};
// 创建axios实例,以免覆盖原来的axios
const v2api = axios.create({ timeout: 10000 });
//post请求的时候,需要加上一个请求头,所以在这统一加了
v2api.defaults.headers.common["Content-Type"] =
"application/x-www-form-urlencoded";
v2api.defaults.transformRequest = data => {
return JSON.stringify(data);
};
// 返回状态拦截,进行状态的集中判断
v2api.interceptors.response.use(
response => {
const res = response.data;
if (res.success) {
return Promise.resolve(res);
} else {
// 这里自己设置一些内部错误码处理
if (res.code === 999) {
messbox(res.message || "登录已过期,请重新登录!");
/*router.replace({ path: `${BASE_URL}/login` });*/
} else {
// 默认的错误提示(不设置success/success=""就会出来)
messbox(res.message || "网络异常,请稍后重试!");
}
return Promise.reject(res);
}
},
error => {
if (/timeout\sof\s\d+ms\sexceeded/.test(error.message)) {
// 超时
messbox("网络出了点问题,请稍后重试!");
}
if (error.response) {
// 这里设置默认返回的http状态码判断
switch (error.response.status) {
// http status handler
case 404:
messbox("请求的资源不存在!");
break;
case 405:
messbox("请求的资源施工中!");
break;
case 500:
messbox("内部错误,请稍后重试!");
break;
case 503:
messbox("服务器正在维护,请稍等!");
break;
}
}
return Promise.reject(error.response);
}
);
// 处理get请求
const get = (url, params, config = {}) => v2api.get(url, {...config, params });
// 处理delete请求,为了防止和关键词delete冲突,方法名定义为deletes
const deletes = (url, params, config = {}) =>
v2api.delete(url, {...config, params });
// 处理post请求
const post = (url, params, config = {}) => v2api.post(url, params, config);
// 处理put请求
const put = (url, params, config = {}) => v2api.put(url, params, config);
export default {
get,
deletes,
post,
put
};