Валидация параметров функций парсинга XML, конвертации (XML > JSON, JSON > XML) парметров отправляемых сообщений
This commit is contained in:
parent
43fd7de6d8
commit
078aa91aa6
@ -174,7 +174,7 @@ const getAppSrvFunction = sAppSrv => {
|
|||||||
//Отправка E-Mail уведомления
|
//Отправка E-Mail уведомления
|
||||||
const sendMail = prms => {
|
const sendMail = prms => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
//Проверяем структуру переданного объекта для старта
|
//Проверяем структуру переданного объекта для отправки E-Mail уведомления
|
||||||
let sCheckResult = validateObject(
|
let sCheckResult = validateObject(
|
||||||
prms,
|
prms,
|
||||||
prmsUtilsSchema.sendMail,
|
prmsUtilsSchema.sendMail,
|
||||||
@ -224,7 +224,7 @@ const sendMail = prms => {
|
|||||||
|
|
||||||
//Сборка URL по адресу сервиса и функции сервиса
|
//Сборка URL по адресу сервиса и функции сервиса
|
||||||
const buildURL = prms => {
|
const buildURL = prms => {
|
||||||
//Проверяем структуру переданного объекта для старта
|
//Проверяем структуру переданного объекта для сборки URL
|
||||||
let sCheckResult = validateObject(prms, prmsUtilsSchema.buildURL, "Параметры функции формирования URL");
|
let sCheckResult = validateObject(prms, prmsUtilsSchema.buildURL, "Параметры функции формирования URL");
|
||||||
//Если структура объекта в норме
|
//Если структура объекта в норме
|
||||||
if (!sCheckResult) {
|
if (!sCheckResult) {
|
||||||
@ -254,36 +254,68 @@ const getIPs = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Разбор XML (обёртка для async/await)
|
//Разбор XML (обёртка для async/await)
|
||||||
const parseXML = (sXML, options) => {
|
const parseXML = prms => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
xml2js.parseString(sXML, options, (err, result) => {
|
//Проверяем структуру переданного объекта для парсинша
|
||||||
if (err) reject(err);
|
let sCheckResult = validateObject(prms, prmsUtilsSchema.parseXML, "Параметры функции разбора XML");
|
||||||
else resolve(result);
|
//Если структура объекта в норме
|
||||||
});
|
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)
|
//Разбор параметров сообщения/ответа (XML > JSON)
|
||||||
const parseOptionsXML = async sOptions => {
|
const parseOptionsXML = async prms => {
|
||||||
try {
|
//Проверяем структуру переданных параметров
|
||||||
parseRes = await parseXML(sOptions, {
|
let sCheckResult = validateObject(
|
||||||
explicitArray: false,
|
prms,
|
||||||
mergeAttrs: true,
|
prmsUtilsSchema.parseOptionsXML,
|
||||||
valueProcessors: [xml2js.processors.parseNumbers, xml2js.processors.parseBooleans]
|
"Параметры функции разбора XML параметров сообщения/ответа"
|
||||||
});
|
);
|
||||||
return parseRes.options;
|
//Если структура объекта в норме
|
||||||
} catch (e) {
|
if (!sCheckResult) {
|
||||||
throw new Error("Ошибка рабора XML с параметрами сообщения/ответа: " + e);
|
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)
|
//Сборка параметров сообщения/ответа (JSON > XML)
|
||||||
const buildOptionsXML = options => {
|
const buildOptionsXML = prms => {
|
||||||
try {
|
//Проверяем структуру переданных параметров
|
||||||
let builder = new xml2js.Builder();
|
let sCheckResult = validateObject(
|
||||||
return builder.buildObject(options);
|
prms,
|
||||||
} catch (e) {
|
prmsUtilsSchema.buildOptionsXML,
|
||||||
throw new Error("Ошибка сборки XML с параметрами сообщения/ответа: " + e);
|
"Параметры функции сборки 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