//对axios进行二次封装
import axios from 'axios';
import qs from 'qs';
// 根据环境变量区分接口的默认地址
switch(process.env.NODE_ENV){
case "production":
axios.defaults.baseURL = "http://生产环境地址";
break;
case "test":
axios.defaults.baseURL = "http://测试环境地址";
break;
default:
axios.defaults.baseURL = "http://开发环境地址"
}
//设置超时时间和跨域是否允许携带凭证
axios.defaults.time = 10000;
axios.defaults.withCreadentials = true ;
//设置 请求传递数据的格式
axios.defaults.header['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.transformRequest = data => qs.stringify(data);
//设置请求拦截器
//客户端发送请求 - > [请求拦截器] - > 服务器
//TOKEN校验 (JWT):接收服务器返回的token,存储到本地存储中,每一次向服务器发请求,需要把token带上
axios.interceptors.reques.use((config) => {
//携带token
const token = localStorage.getItem('token');
token && (config.headers.Authorization = token);
return config;
},error => {
return Promise.reject(error)
}
);
//响应拦截器
//服务端返回信息 - > [拦截的统一处理] - > 客户端的js获取到信息
// axios.defaults.validateStatus = status => {
// //自定义响应成功的HTTP状态码
// return /^(2|3)\d{2}$/.test(status)
// }
axios.interceptors.response.use(response => {
return response
}, error => {
//对请求返回的错误进行处理
let {response } = error;
if(response) {
//服务器返回结果了
switch (response.status) {
case 401: //=>权限
//提示未登录或无权限等;
break;
case 403: //服务器拒绝执行 (token过期)
break;
case 404: //找不到页面
break;
}
} else {
//服务器连结果都没有返回
if(!window.navigator.onLine) {
//断网处理:跳转断网页面/提示网络错误等等
return;
}
return Promise.reject(error)
}
})
export default axios;