class clientApi {
axios_instance;
axiosPromiseArr=[];
/**
* 初始化servers
* @param hot
*/
constructor(hot) {
/**初始化请求实例*/
this.axios_instance = axios.create({
baseURL: `${hot}/`,
withCredentials:true,
timeout: 60000,
});
/**添加请求拦截器*/
this.axios_instance.interceptors.request.use(
config => {
if (config.method === "post") {
/**序列化
* 若是提交能直接接受json 格式,可以不用 qs 来序列化的
*/
if(config.data!=null) {
/**判断是否是数组类型。如果是 那就不进行序列化*/
if(!(config.data instanceof Array) && (config.data.NoSerial==null)){
config.data = qs.stringify(config.data);
}
}
}
if(Auth.getToken()==null){
config.headers['Authorization'] ='Basic ZHJpenpsZTpkcml6emxl';
}
else{
config.headers['Authorization'] = 'Bearer ' + Auth.getToken();
}
return config;
},
error => {
console.log(error.message,"error.message")
/**对错误请求做处理*/
return Promise.reject(error.message);
});
/**添加响应拦截器*/
this.axios_instance.interceptors.response.use(
response => {
return response;
},
error => {
/**对响应错误做处理*/
if(!validate.validateNull(error.response)){
/**根据返回状态匹配提示消息,匹配失败使用原始消息*/
error.message = errorcode[error.response.status]||error.message;
if(!validate.validateNull(error.response.data)) {
/**根据返回错误码匹配提示消息,匹配失败用原始消息*/
if (!validate.validateNull(error.response.data.error)) {
error.message = errorcode[error.response.data.error] || error.message;
}
/**通过错误描述匹配提示消息,匹配失败使用原始消息*/
if (!validate.validateNull(error.response.data.error_description)) {
error.message = errorcode[error.response.data.error_description] || error.message;
}
}
switch (error.response.status) {
/**异常请求*/
case 400:
console.error(error.message);
switch (error.response.data.error) {
case "invalid_grant": {
/**认证异常*/
Msg.error(error.message);
break;
}
}
break;
/**认证异常*/
case 401:
console.error(error.message);
Msg.error(error.message);
switch (error.response.data.error) {
case "invalid_token": {
/**token无效需要重新获取认证信息*/
store.dispatch('accountLogout').then(() => {
router.push('/login');
}
);
break;
}
}
break;
/**操作未授权*/
case 403:
......
/**页面不存在*/
case 404:
......
/**验证码异常*/
case 488:
......
/**内部服务器异常*/
case 500:
......
case 503:
......
default:
console.error(error.message);
break;
}
}
else{
error.message = errorcode[error.message]||error.message;
console.error(error.message);
}
return Promise.reject(error.message);
}
);
}
/**
* request
* @param method
* @param url
* @param body
* @returns {Promise<any>}
*/
request(method = 'GET', url, body) {
if (typeof body !== 'object') body = {};
method = method.toLocaleLowerCase();
if (method === 'get') {
url = `${url}?${qs.stringify(body)}`;
body = {}
}
let value = this.axios_instance.request({
url: url,
method: method,
data: body
}
);
return Promise.resolve(value);
}
/**
* request_export
* @param method
* @param url
* @param body
* @returns {Promise<any>}
*/
request_export(method = 'GET', url, body) {
if (typeof body !== 'object') body = {};
method = method.toLocaleLowerCase();
if (method === 'get') {
url = `${url}?${qs.stringify(body)}`;
body = {}
}
let value = this.axios_instance.request({
url: url,
method: method,
data: body,
responseType: 'arraybuffer'
}
);
return Promise.resolve(value);
}
uploadFile(method = 'post', url, file) {
method = method.toLocaleLowerCase();
let param = new FormData();
param.append('file', file);
let value = this.axios_instance.request({
url: url,
method: method,
data: param,
//boundary分隔符,分隔多个文件、表单项。
headers: {'Content-Type': 'multipart/form-data;boundary=---------------------------7d4a6d158c9'}
}
);
return Promise.resolve(value);
}
//最后要将对象暴露出去
export const client = new clientApi("base-url 地址");
axios封装
最新推荐文章于 2024-07-22 15:40:42 发布