Модуль обработки запросов к надстройке PWS (Parus WEB-Service)

This commit is contained in:
Mikhail Chechnev 2019-11-29 20:43:25 +03:00
parent 94d44196bf
commit 038dbcaebd

79
modules/pws.js Normal file
View File

@ -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;