-
Notifications
You must be signed in to change notification settings - Fork 451
axios请求封装 统一异常处理
Exrick edited this page Jun 2, 2018
·
2 revisions
import axios from 'axios';
import { getStore, setStore } from './storage';
import { router } from '../router/index';
import { Message } from 'iview';
import Cookies from 'js-cookie';
import Main from '@/views/Main.vue';
// 统一请求路径前缀
let base = '';
// 超时设定
axios.defaults.timeout = 10000;
axios.interceptors.request.use(config => {
return config;
}, err => {
Message.error('请求超时');
return Promise.resolve(err);
});
// http response 拦截器
axios.interceptors.response.use(response => {
const data = response.data;
// 根据返回的code值来做不同的处理(和后端约定)
switch (data.code) {
case 401:
// 未登录 清除已登录状态
Cookies.set('userInfo', '');
setStore('accessToken', '');
router.push('/login');
break;
case 403:
// 没有权限
if (data.message !== null) {
Message.error(data.message);
} else {
Message.error("未知错误");
}
break;
case 500:
// 错误
if (data.message !== null) {
Message.error(data.message);
} else {
Message.error("未知错误");
}
break;
default:
return data;
}
return data;
}, (err) => { // 这里是返回状态码不为200时候的错误处理
Message.error(err.toString());
return Promise.resolve(err);
});
export const getRequest = (url, params) => {
let accessToken = getStore('accessToken');
return axios({
method: 'get',
url: `${base}${url}`,
params: params,
headers: {
'accessToken': accessToken
}
});
};
export const postRequest = (url, params) => {
let accessToken = getStore("accessToken");
return axios({
method: 'post',
url: `${base}${url}`,
data: params,
transformRequest: [function (data) {
let ret = '';
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
}
return ret;
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'accessToken': accessToken
}
});
};
export const putRequest = (url, params) => {
let accessToken = getStore("accessToken");
return axios({
method: 'put',
url: `${base}${url}`,
data: params,
transformRequest: [function (data) {
let ret = '';
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
}
return ret;
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'accessToken': accessToken
}
});
};
export const deleteRequest = (url, params) => {
let accessToken = getStore('accessToken');
return axios({
method: 'delete',
url: `${base}${url}`,
params: params,
headers: {
'accessToken': accessToken
}
});
};
export const uploadFileRequest = (url, params) => {
let accessToken = getStore('accessToken');
return axios({
method: 'post',
url: `${base}${url}`,
params: params,
headers: {
'accessToken': accessToken
}
});
};
- 为了之后使用的方便,在man.js中设置将其挂载至全局Vue,之后就可以不用导入直接像这样使用:this.getRequest()
import { getRequest, postRequest, putRequest, deleteRequest, uploadFileRequest } from './utils/api';
Vue.prototype.getRequest = getRequest;
Vue.prototype.postRequest = postRequest;
Vue.prototype.putRequest = putRequest;
Vue.prototype.deleteRequest = deleteRequest;
Vue.prototype.uploadFileRequest = uploadFileRequest;