Валидация параметров функций парсинга XML, конвертации (XML > JSON, JSON > XML) парметров отправляемых сообщений
This commit is contained in:
parent
43fd7de6d8
commit
078aa91aa6
@ -174,7 +174,7 @@ const getAppSrvFunction = sAppSrv => {
|
||||
//Отправка E-Mail уведомления
|
||||
const sendMail = prms => {
|
||||
return new Promise((resolve, reject) => {
|
||||
//Проверяем структуру переданного объекта для старта
|
||||
//Проверяем структуру переданного объекта для отправки E-Mail уведомления
|
||||
let sCheckResult = validateObject(
|
||||
prms,
|
||||
prmsUtilsSchema.sendMail,
|
||||
@ -224,7 +224,7 @@ const sendMail = prms => {
|
||||
|
||||
//Сборка URL по адресу сервиса и функции сервиса
|
||||
const buildURL = prms => {
|
||||
//Проверяем структуру переданного объекта для старта
|
||||
//Проверяем структуру переданного объекта для сборки URL
|
||||
let sCheckResult = validateObject(prms, prmsUtilsSchema.buildURL, "Параметры функции формирования URL");
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
@ -254,36 +254,68 @@ const getIPs = () => {
|
||||
};
|
||||
|
||||
//Разбор XML (обёртка для async/await)
|
||||
const parseXML = (sXML, options) => {
|
||||
const parseXML = prms => {
|
||||
return new Promise((resolve, reject) => {
|
||||
xml2js.parseString(sXML, options, (err, result) => {
|
||||
if (err) reject(err);
|
||||
else resolve(result);
|
||||
});
|
||||
//Проверяем структуру переданного объекта для парсинша
|
||||
let sCheckResult = validateObject(prms, prmsUtilsSchema.parseXML, "Параметры функции разбора XML");
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
xml2js.parseString(prms.sXML, prms.options, (err, result) => {
|
||||
if (err) reject(err);
|
||||
else resolve(result);
|
||||
});
|
||||
} else {
|
||||
reject(new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//Разбор параметров сообщения/ответа (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);
|
||||
const parseOptionsXML = async prms => {
|
||||
//Проверяем структуру переданных параметров
|
||||
let sCheckResult = validateObject(
|
||||
prms,
|
||||
prmsUtilsSchema.parseOptionsXML,
|
||||
"Параметры функции разбора XML параметров сообщения/ответа"
|
||||
);
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
try {
|
||||
parseRes = await parseXML({
|
||||
sXML: prms.sOptions,
|
||||
options: {
|
||||
explicitArray: false,
|
||||
mergeAttrs: true,
|
||||
valueProcessors: [xml2js.processors.parseNumbers, xml2js.processors.parseBooleans]
|
||||
}
|
||||
});
|
||||
return parseRes.root;
|
||||
} catch (e) {
|
||||
throw new Error("Ошибка рабора XML с параметрами сообщения/ответа: " + e);
|
||||
}
|
||||
} else {
|
||||
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||
}
|
||||
};
|
||||
|
||||
//Сборка параметров сообщения/ответа (JSON > XML)
|
||||
const buildOptionsXML = options => {
|
||||
try {
|
||||
let builder = new xml2js.Builder();
|
||||
return builder.buildObject(options);
|
||||
} catch (e) {
|
||||
throw new Error("Ошибка сборки XML с параметрами сообщения/ответа: " + e);
|
||||
const buildOptionsXML = prms => {
|
||||
//Проверяем структуру переданных параметров
|
||||
let sCheckResult = validateObject(
|
||||
prms,
|
||||
prmsUtilsSchema.buildOptionsXML,
|
||||
"Параметры функции сборки XML параметров сообщения/ответа"
|
||||
);
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
try {
|
||||
let builder = new xml2js.Builder();
|
||||
return builder.buildObject({ root: prms.options });
|
||||
} catch (e) {
|
||||
throw new Error("Ошибка сборки XML с параметрами сообщения/ответа: " + e);
|
||||
}
|
||||
} else {
|
||||
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -97,3 +97,53 @@ exports.buildURL = new Schema({
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Схема валидации параметров функции разбора XML
|
||||
exports.parseXML = new Schema({
|
||||
//Разбираемый XML
|
||||
sXML: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: path => `Разбираемый XML (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||
required: path => `Не указан разбираемый XML (${path})`
|
||||
}
|
||||
},
|
||||
//Параметры парсера
|
||||
options: {
|
||||
type: Object,
|
||||
required: true,
|
||||
message: {
|
||||
type: path =>
|
||||
`Параметры парсера XML (${path}) имеют некорректный тип данных (ожидалось - Object, см. документацию к XML2JS - https://github.com/Leonidas-from-XIV/node-xml2js)`,
|
||||
required: path => `Не указаны параметры парсера XML (${path})`
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Схема валидации параметров функции разбора XML параметров сообщения/ответа (XML > JSON)
|
||||
exports.parseOptionsXML = new Schema({
|
||||
//XML параметры сообщения/ответа
|
||||
sOptions: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: path => `XML параметры сообщения/ответа (${path}) имеют некорректный тип данных (ожидалось - String)`,
|
||||
required: path => `Не указаны XML параметры сообщения/ответа (${path})`
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Схема валидации параметров функции сборки параметров сообщения/ответа (JSON > XML)
|
||||
exports.buildOptionsXML = new Schema({
|
||||
//XML параметры сообщения/ответа
|
||||
options: {
|
||||
type: Object,
|
||||
required: true,
|
||||
message: {
|
||||
type: path =>
|
||||
`Объект параметров сообщения/ответа (${path}) имеет некорректный тип данных (ожидалось - Object)`,
|
||||
required: path => `Не указан объект параметров сообщения/ответа (${path})`
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user