@krmao/react-basic
Version:
### features
154 lines (153 loc) • 7.84 kB
JavaScript
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;
;