UNPKG

ptool

Version:

vue项目开发通用工具类封装

189 lines (188 loc) 8.08 kB
"use strict"; /** * @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;