基于vue2+element ui使用 axios 封装
import axios from 'axios';
import router from '../router';
import store from '../store/index';
import { Message } from 'element-ui';
const tip = msg =>
Message({
type: 'error',
message: msg,
});
if (process.env.NODE_ENV == 'development') {
axios.defaults.baseURL = 'http://192.168.1.188:9021';
} else if (process.env.NODE_ENV == 'production') {
axios.defaults.baseURL = 'http://192.168.1.188:9022';
} else if (process.env.NODE_ENV == 'test') {
axios.defaults.baseURL = 'http://192.168.1.188:9023';
}
const toLogin = () => {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath,
},
});
};
const errorHandle = (status, other) => {
switch (status) {
case 401:
toLogin();
break;
case 403:
tip('登录过期,请重新登录');
localStorage.removeItem('token');
setTimeout(() => {
toLogin();
}, 1000);
break;
case 404:
toLogin();
tip('请求的资源不存在');
break;
default:
console.log(other);
}
};
var instance = axios.create({ timeout: 1000 * 12 });
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
instance.interceptors.request.use(
config => {
const token = store.state.token;
token && (config.headers.Authorization = token);
return config;
},
error => Promise.error(error),
);
instance.interceptors.response.use(
res => (res.status === 200 ? Promise.resolve(res) : Promise.reject(res)),
error => {
const { response } = error;
console.log(response);
if (response) {
errorHandle(response.status, response);
return Promise.reject(response);
} else {
if (!window.navigator.onLine) {
store.commit('changeNetwork', false);
} else {
return Promise.reject(error);
}
}
},
);
export default instance;