UNPKG

@krmao/react-basic

Version:
154 lines (153 loc) 7.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var isomorphic_unfetch_1 = (0, tslib_1.__importDefault)(require("isomorphic-unfetch")); var BasicHttpClient = /** @class */ (function () { function BasicHttpClient() { } BasicHttpClient.axiosClient = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.timeout, timeout = _c === void 0 ? BasicHttpClient.timeout : _c; if (!!BasicHttpClient.__axiosClient) { return BasicHttpClient.__axiosClient; } // noinspection JSUnresolvedFunction // baseURL 将自动加在 url 前面(get/post 里面的 url 填写 ip:port 后面的 path), 除非 url 是一个绝对 URL // 不设 baseUrl, 则 package.json 里面的 proxy 才会生效 var innerAxios = require("axios").create({ timeout: timeout !== null && timeout !== void 0 ? timeout : BasicHttpClient.timeout }); // `timeout` 指定请求超时的毫秒数(0 表示无超时时间) // 添加请求拦截器 innerAxios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 console.log(config); return config; }, function (error) { // 对响应错误做点什么 if (error.response) { // 请求已发出,但服务器响应的状态码不在 2xx 范围内 console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else { // Something happened in setting up the request that triggered an Error console.log("Error", error.message); } console.log(error.config); return Promise.reject(error); }); // 添加响应拦截器 innerAxios.interceptors.response.use(function (response) { // 对响应数据做点什么 console.log(response.data); console.log(response.status); console.log(response.statusText); console.log(response.headers); console.log(response.config); return response; }, function (error) { // 对响应错误做点什么 if (error.response) { // 请求已发出,但服务器响应的状态码不在 2xx 范围内 console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else { // Something happened in setting up the request that triggered an Error console.log("Error", error.message); } console.log(error.config); return Promise.reject(error); }); BasicHttpClient.__axiosClient = innerAxios; }; BasicHttpClient.get = function (url, data) { return this.request(url, data, { method: "get" }); }; BasicHttpClient.post = function (url, data) { return this.request(url, data, { method: "post" }); }; BasicHttpClient.requestBlob = function (url, data, fileName, _a) { var _b = _a.method, method = _b === void 0 ? "post" : _b, _c = _a.timeout, timeout = _c === void 0 ? BasicHttpClient.timeout : _c, _d = _a.openBlob, openBlob = _d === void 0 ? true : _d, _e = _a.config, config = _e === void 0 ? {} : _e; return new Promise(function (resolve, reject) { BasicHttpClient.request(url, (0, tslib_1.__assign)({}, data), { method: method, timeout: timeout, config: (0, tslib_1.__assign)({ responseType: "blob" }, config) }) .then(function (data) { var _a; if ((data === null || data === void 0 ? void 0 : data.type) === "application/octet-stream") { console.log("--[response](blob)(success)"); resolve(data); if (openBlob) { var url_1 = window.URL.createObjectURL(new Blob([data])); var a = document.createElement("a"); a.href = url_1; a.download = fileName; a.click(); (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(a); } } else { reject("response data type:" + (data === null || data === void 0 ? void 0 : data.type) + " is not application/octet-stream"); } }) .catch(function (errorString) { return reject(errorString); }); }); }; BasicHttpClient.request = function (url, data, _a) { var _b = _a.method, method = _b === void 0 ? "post" : _b, _c = _a.timeout, timeout = _c === void 0 ? BasicHttpClient.timeout : _c, _d = _a.config, config = _d === void 0 ? {} : _d; console.log("--[request](start)", url, data); return new Promise(function (resolve, reject) { var _a; (_a = BasicHttpClient.axiosClient({ timeout: timeout })) === null || _a === void 0 ? void 0 : _a.request((0, tslib_1.__assign)({ url: url, method: method, data: data, validateStatus: function (status) { return status >= 200 && status < 300; // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 reject }, transformRequest: [ function (data) { return data; } ], transformResponse: [ function (data) { return data; } ] }, config)).then(function (response) { if ((response === null || response === void 0 ? void 0 : response.status) === BasicHttpClient.code) { console.log("--[response](success)", url, response); resolve(response.data); } else { reject("response status:" + response.status + " invalid"); } }).catch(function (error) { console.log("--[response](failure)", url, error); reject(error ? error.message : "request failure"); }); }); }; BasicHttpClient.timeout = 15 * 1000; BasicHttpClient.code = 200; BasicHttpClient.fetch = function (url, data, _a) { var _b = _a.method, method = _b === void 0 ? "post" : _b; console.log("--[request](start)", url, data); return new Promise(function (resolve, reject) { // noinspection JSCheckFunctionSignatures (0, isomorphic_unfetch_1.default)(url, { method: method, body: JSON.stringify(data), headers: { "Content-Type": "application/json;charset=UTF-8" } }) .then(function (response) { var result = response.json(); console.log("--[response](success)", url, result); if ((response === null || response === void 0 ? void 0 : response.status) === BasicHttpClient.code) { resolve(result); } else { reject("response status:" + response.status + " invalid"); } }) .catch(function (error) { console.log("--[response](failure)", url, error); reject(error ? error.message : "request failure"); }); }); }; return BasicHttpClient; }()); exports.default = BasicHttpClient;