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