forked from CITKParus/P8-ExchangeService
Модуль обработки запросов к надстройке PWS (Parus WEB-Service)
This commit is contained in:
parent
94d44196bf
commit
038dbcaebd
79
modules/pws.js
Normal file
79
modules/pws.js
Normal 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;
|
Loading…
x
Reference in New Issue
Block a user