From 6bb8b466826cdfa23e051ea6a6a889d07f7568e7 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 6 Jun 2019 22:11:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20XML=20-=20JSON=20-=20XML=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B2=D0=BA=D0=B8=20(=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=B8=20=D1=82.=D0=BF.)?= =?UTF-8?q?=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F/?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/utils.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/core/utils.js b/core/utils.js index f77ddff..a1e9194 100644 --- a/core/utils.js +++ b/core/utils.js @@ -9,6 +9,7 @@ const _ = require("lodash"); //Работа с массивами и объектами const os = require("os"); //Средства операционной системы +const xml2js = require("xml2js"); //Конвертация XML в JSON const Schema = require("validate"); //Схемы валидации const nodemailer = require("nodemailer"); //Отправка E-Mail сообщений const { @@ -252,6 +253,40 @@ const getIPs = () => { return ips; }; +//Разбор XML (обёртка для async/await) +const parseXML = (sXML, options) => { + return new Promise((resolve, reject) => { + xml2js.parseString(sXML, options, (err, result) => { + if (err) reject(err); + else resolve(result); + }); + }); +}; + +//Разбор параметров сообщения/ответа (XML > JSON) +const parseOptionsXML = async sOptions => { + try { + parseRes = await parseXML(sOptions, { + explicitArray: false, + mergeAttrs: true, + valueProcessors: [xml2js.processors.parseNumbers, xml2js.processors.parseBooleans] + }); + return parseRes.options; + } catch (e) { + throw new Error("Ошибка рабора XML с параметрами сообщения/ответа: " + e); + } +}; + +//Сборка параметров сообщения/ответа (JSON > XML) +const buildOptionsXML = options => { + try { + let builder = new xml2js.Builder(); + return builder.buildObject(options); + } catch (e) { + throw new Error("Ошибка сборки XML с параметрами сообщения/ответа: " + e); + } +}; + //----------------- // Интерфейс модуля //----------------- @@ -265,3 +300,6 @@ exports.getAppSrvFunction = getAppSrvFunction; exports.sendMail = sendMail; exports.buildURL = buildURL; exports.getIPs = getIPs; +exports.parseXML = parseXML; +exports.parseOptionsXML = parseOptionsXML; +exports.buildOptionsXML = buildOptionsXML;