ptool
Version:
vue项目开发通用工具类封装
189 lines (188 loc) • 8.08 kB
JavaScript
;
/**
* @FileName axios.ts
* @Author Mad Dragon <395548460@qq.com>
* @Version V 0.0.1
* @Date 2021/4/13 11:58
* @Title
* @Desc
**/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lStorage_1 = __importDefault(require("./lStorage"));
const tools_1 = __importDefault(require("./tools"));
const log_1 = __importDefault(require("./log"));
const axios_1 = __importDefault(require("axios"));
class HttpRequest {
constructor(baseUrl = '', option = {}) {
this.queue = {};
this.option = {};
this.baseUrl = baseUrl;
this.option = option;
this.queue = {};
}
static apiMsgTemplate(apiInfo) {
return `<div style="font-size: 14px;word-break:break-all; "><p style="color: red;font-size: 14px;">请截图给管理员,以便快捷修复错误!</p><p>错误: ${apiInfo.statusText}</p><p>method: ${apiInfo.request.method}</p><p style="margin: 5px 0;">URL: ${apiInfo.request.url}</p><p>参数:<br>${apiInfo.request.data.toString()}</p></div>`;
}
interceptors(instance, url) {
// 请求拦截
instance.interceptors.request.use((config) => {
// 添加全局的loading...
if (!Object.keys(this.queue).length) {
// @ts-ignore
}
// @ts-ignore
this.queue[url] = true;
return config;
}, (error) => Promise.reject(error));
// axios 响应拦截
instance.interceptors.response.use((res) => {
this.destroy(url);
const { data, config, request: { responseURL } } = res;
const response = res.request;
const apiInfo = {
status: (data && data.status) || (data && data.code) || response.status,
statusText: (data && data.msg) || (data && data.message) || response.statusText,
request: {
url: responseURL,
api: config.baseURL + config.url || '',
method: config.method,
data: config.data || ''
},
response: {
data: data && data.data || ''
}
};
log_1.default.setApiLog('apiLogStorage', apiInfo);
if (data && data.success && data.success.toString() === 'false') {
throw data;
}
return data && data.data || '';
}, (error) => {
// log.info('error', JSON.parse(JSON.stringify(error)));
this.destroy(url);
let apiInfo;
if (error.response) {
const { response: { status, statusText, data, config, request: { responseURL } } } = error;
apiInfo = {
status: (data && data.status) || (data && data.code) || status,
statusText: (data && data.msg) || (data && data.message) || statusText,
request: {
url: responseURL,
api: config.baseURL + config.url || '',
method: config.method,
data: config.data || ''
},
response: {
data: data || ''
}
};
}
else {
const { config, message } = JSON.parse(JSON.stringify(error));
const { request } = error;
apiInfo = {
status: request && request.status || '',
statusText: message || request && request.statusText || '',
request: {
url: '',
api: config && config.baseURL + config && config.url || '',
method: config && config.method || '',
data: config && config.data || ''
},
response: {
data: ''
}
};
}
log_1.default.setApiLog('apiLogStorage', apiInfo);
this.unusualStatus(apiInfo.status, apiInfo);
if (apiInfo.response && apiInfo.response.data) {
return Promise.reject(apiInfo.response.data);
}
return Promise.reject(error);
});
}
request(options) {
const instance = axios_1.default.create();
options = Object.assign(this.getInsideConfig(), options);
this.interceptors(instance, options.url);
return instance(options);
}
getInsideConfig() {
return Object.assign({ baseURL: this.baseUrl, timeout: 1000 * 36, responseType: 'json', headers: {
'If-Modified-Since': 0,
'Cache-Control': 'no-cache'
} }, this.option);
}
destroy(url) {
// @ts-ignore
delete this.queue[url];
if (!Object.keys(this.queue).length) {
// @ts-ignore
}
}
unusualStatus(code, apiInfo) {
switch (code) {
case 0:
if (apiInfo.statusText && apiInfo.statusText.indexOf('timeout') > -1) {
tools_1.default.message('warning', `请求超时,请稍后再试!`);
}
if (apiInfo.statusText && apiInfo.statusText.indexOf('Network Error') > -1) {
tools_1.default.message('warning', `网络异常,请稍后再试!`);
}
break;
case 200:
break;
case 400:
tools_1.default.notice('warning', `请求参数错误: ${apiInfo.status}`, HttpRequest.apiMsgTemplate(apiInfo), 15);
break;
case 401:
case 4011:
// @ts-ignore
if (window && window.md && window.md.notLogin) {
lStorage_1.default.setItem('userInfo', '');
lStorage_1.default.setItem('isLogin', false);
lStorage_1.default.setItem('Authorization', '');
lStorage_1.default.setItem('errorMSG', '');
window.md.notLogin();
}
else {
tools_1.default.alert('warning', '登录信息', '登录超时或未登录,请重新登录!', () => {
lStorage_1.default.setItem('userInfo', '');
lStorage_1.default.setItem('isLogin', false);
lStorage_1.default.setItem('Authorization', '');
lStorage_1.default.setItem('errorMSG', '');
});
}
break;
case 403:
tools_1.default.message('error', `提示: ${apiInfo.statusText}`);
break;
case 404:
tools_1.default.notice('info', `资源未找到: ${apiInfo.status}`, HttpRequest.apiMsgTemplate(apiInfo), 15);
break;
case 405:
tools_1.default.notice('warning', `请求类型错误: ${apiInfo.status}`, HttpRequest.apiMsgTemplate(apiInfo), 15);
break;
case 500:
tools_1.default.notice('error', `服务器错误: ${apiInfo.status}`, HttpRequest.apiMsgTemplate(apiInfo), 15);
break;
case 502:
tools_1.default.message('warning', '服务器未响应,请稍后再试!', 15);
break;
case 503:
tools_1.default.message('warning', '服务器维护中,请稍后再试!', 15);
break;
case 504:
tools_1.default.message('warning', `请求超时,请稍后再试!`, 15);
break;
default:
tools_1.default.message('warning', `${apiInfo.status} : ${apiInfo.statusText}`);
break;
}
}
}
exports.default = HttpRequest;