From 038dbcaebd6bb3f2f702559803c3103a939f3853 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 29 Nov 2019 20:43:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20=D0=BA=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B4=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B5=20PWS=20(Parus?= =?UTF-8?q?=20WEB-Service)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/pws.js | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 modules/pws.js diff --git a/modules/pws.js b/modules/pws.js new file mode 100644 index 0000000..b305fe0 --- /dev/null +++ b/modules/pws.js @@ -0,0 +1,79 @@ +/* + Сервис интеграции ПП Парус 8 с WEB API + Дополнительный модуль: Parus WEB Service (PWS) +*/ + +//---------------------- +// Подключение библиотек +//---------------------- +const xmlParser = require("xml2js").parseString; //Конвертация XML в JSON +const js2xmlparser = require("js2xmlparser"); //Конвертация JSON в XML + +//--------------------- +// Глобальные константы +//--------------------- + +//Наименования XML-элементов +const SREQEST_ROOT = "XREQEST"; //Корневой элемент XML-представления входящего запроса + +//Поля заголовка сообщения +const SHEADER_CONTENT_TYPE_JSON = "application/json"; //Значение "content-type" для JSON + +//------------ +// Тело модуля +//------------ + +//Разбор XML +const parseXML = xmlDoc => { + return new Promise((resolve, reject) => { + xmlParser(xmlDoc, { explicitArray: false, mergeAttrs: true }, (err, result) => { + if (err) reject(err); + else resolve(result); + }); + }); +}; + +//Обработчик "До" для полученного сообщения +const before = async prms => { + //Если пришел запрос в JSON + if (prms.options.headers["content-type"] == SHEADER_CONTENT_TYPE_JSON) { + //Конвертируем полученный в JSON-запрос в XML, понятный серверной части + let request = {}; + let requestXML = ""; + try { + request = JSON.parse(prms.queue.blMsg.toString()); + requestXML = js2xmlparser.parse(SREQEST_ROOT, request); + } catch (e) { + requestXML = ""; + } + //Возвращаем отконвертированное в качестве тела запроса + return { + blMsg: new Buffer(requestXML) + }; + } +}; + +//Обработчик "После" для полученного сообщения +const after = async prms => { + //Если пришел запрос в JSON + if (prms.options.headers["content-type"] == SHEADER_CONTENT_TYPE_JSON) { + //Конвертируем ответ, подготовленный сервером в JSON + parseRes = await parseXML(prms.queue.blResp.toString()); + //Вернём его клиенту в таком виде + return { + optionsResp: { + headers: { + "content-type": SHEADER_CONTENT_TYPE_JSON + } + }, + blResp: new Buffer(JSON.stringify(parseRes)) + }; + } +}; + +//----------------- +// Интерфейс модуля +//----------------- + +exports.before = before; +exports.after = after;