UNPKG

node-easysms

Version:

EasySMS is an SMS sender for Node.js

170 lines (169 loc) 6.32 kB
'use strict'; 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; ;