记录 封装的axios,防止忘了
import axios from 'axios'
import qs from 'qs'
// 配置默认的url开头 测试 生产 开发
switch (process.env.NODE_ENV) {
case 'test':
axios.defaults.baseURL = ""
break;
case 'production':
axios.defaults.baseURL = ""
break;
default:
axios.defaults.baseURL = ""
break;
}
// 超时时间
axios.defaults.timeout = 10000;
// 跨域是否允许携带凭证
axios.defaults.withCredentials = true;
/**
* 设置请求传递数据的格式
* x-www-form-urlencoded xxx=xxx&xxx=xxx 一般将post转为这种格式
*/
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
//仅对post请求起作用 data 请求体里的数据
axios.defaults.transformRequest = data => qs.stringify(data);
/**
* 请求拦截器 发送请求->请求拦截器->服务器
* TOKEN校验(JWT),接收服务器返回的token,存储到vuex/本地存储中,每一次向服务器发请求,应该把token带上
*
*/
axios.interceptors.requet.use(config => {
let token = localStorage.getItem('token')
token && (config.headers.Authorization = token)
return config;
}, error => {
return Promise.reject(error)
})
/**
* 响应拦截器 服务器->响应拦截器->客户端
*/
// axios.defaults.validateStatus = status =>{
// // 自定义响应成功的HTTP状态码,如果配置了,则响应拦截里面error 只能拦截除了2、3开头之外的错误,如果不配置,则可以拦截除了2开头之外的错误
// return /^(2|3)\d{2}$/.test(status)
// }
axios.interceptors.response.use(response => {
return response.data
}, error => {
let { response } = error;
if (response) {//服务器返回结果了
switch (response.status) {
case 401://权限
break;
case 403://服务器接收请求但拒接执行,(token过期)
break;
case 404://找不到页面
break;
}
} else {//服务器并未结果了 1.服务器崩了 2.客户端断网
// 断网处理:跳转至断网页面
if (!window.navigator.onLine) {
return;
}
return Promise.reject(error);
}
})
export default axios;