node-easysms
Version:
EasySMS is an SMS sender for Node.js
170 lines (169 loc) • 6.32 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpClientMixin = void 0;
const form_data_1 = __importDefault(require("form-data"));
const Utils_1 = require("../Support/Utils");
class HttpClientMixin {
/**
* 获取请求客户端实例
* @returns
*/
getHttpClient() {
return this.httpClient;
}
/**
* 设置请求客户端实例
* @param instance
* @returns
*/
setHttpClient(instance) {
this.httpClient = instance;
return this;
}
get(url, query = {}, headers = {}) {
return this.request('get', url, {
params: query,
headers,
});
}
post(url, data = {}, headers = {}) {
return this.request('post', url, {
data,
headers,
});
}
postJson(url, data = {}, headers = {}) {
return this.request('post', url, {
json: data,
headers,
});
}
postForm(url, data = {}, headers = {}) {
return this.request('post', url, {
formData: data,
headers,
});
}
/**
* 发起网络请求
* @param method 请求方式
* @param url 请求地址
* @param payload 请求参数
* @returns
*/
request(method_1, url_1) {
return __awaiter(this, arguments, void 0, function* (method, url, payload = {}) {
let options = Object.assign({}, payload);
if (!options.headers)
options.headers = {};
options.method = method;
options.url = url;
if (typeof this['getTimeout'] === 'function') {
options.timeout = this['getTimeout']();
}
else {
options.timeout = 5000;
}
if (options['xml'] !== undefined) {
let xml = '';
if (typeof options['xml'] === 'object') {
xml = (0, Utils_1.buildXml)(options['xml']);
}
else if (typeof options['xml'] === 'string') {
xml = options['xml'];
}
else {
throw new Error('The type of `xml` must be string or object.');
}
if (!options.headers['Content-Type'] && !options.headers['content-type']) {
options.headers['content-type'] = 'text/xml';
}
options.data = xml;
options['xml'] = undefined;
delete options['xml'];
}
if (options['json'] !== undefined) {
let json = '';
if (typeof options['json'] === 'object') {
json = JSON.stringify(options['json']);
}
else if (typeof options['json'] === 'string') {
json = options['json'];
}
else {
throw new Error('The type of `json` must be string or object.');
}
if (!options.headers['Content-Type'] && !options.headers['content-type']) {
options.headers['content-type'] = 'application/json';
}
options.data = json;
options['json'] = undefined;
delete options['json'];
}
if (options['formData'] && Object.keys(options['formData']).length > 0) {
let formData = new form_data_1.default();
for (let key in options['formData']) {
formData.append(key, options['formData'][key]);
}
if (options.data)
for (let key in options.data) {
formData.append(key, options.data[key]);
}
options.data = formData;
options['formData'] = undefined;
delete options['formData'];
}
// 如果 data 是 FormData 对象,则从中提取 headers
if (options.data && options.data instanceof form_data_1.default) {
options.headers = Object.assign(Object.assign({}, (yield this.getFormDataHeaders(options.data))), options.headers);
}
let response = yield this.httpClient.request(options);
return yield this.unwrapResponse(response);
});
}
/**
* 获取 FormData 对象的 headers
* @param formData
* @returns
*/
getFormDataHeaders(formData) {
return new Promise((resolve, reject) => {
let headers = formData.getHeaders();
formData.getLength(function (err, length) {
if (err) {
headers['content-length'] = 0;
}
else {
headers['content-length'] = length;
}
resolve(headers);
});
});
}
unwrapResponse(response) {
return __awaiter(this, void 0, void 0, function* () {
let contentType = response.headers["Content-Type"] || response.headers["content-type"] || '';
let content = response.data;
if (contentType) {
if (contentType.indexOf('xml') > -1) {
content = yield (0, Utils_1.parseXml)(content);
}
}
return content;
});
}
}
exports.HttpClientMixin = HttpClientMixin;
;