Валидация результатов исполнения функций пост и пред обработки сервером приложений исходящих сообщений

This commit is contained in:
Mikhail Chechnev 2018-12-11 17:04:34 +03:00
parent bc0cd5493f
commit 0de8425e05
2 changed files with 69 additions and 5 deletions

View File

@ -96,18 +96,44 @@ const appProcess = async prms => {
//Выполняем обработчик "До" (если он есть)
if (prms.function.sAppSrvBefore) {
const fnBefore = getAppSrvFunction(prms.function.sAppSrvBefore);
let resBefore = await fnBefore(prms); //!!!!!!!!!!!!!!!! КОНТРОЛЬ ФОРМАТА РЕЗУЛЬТАТА
options = _.cloneDeep(resBefore.options);
let resBefore = await fnBefore(prms);
//Проверяем структуру ответа функции предобработки
let sCheckResult = validateObject(
resBefore,
objOutQueueProcessorSchema.OutQueueProcessorFnBefore,
"Результат функции предобработки исходящего сообщения"
);
//Если структура ответа в норме
if (!sCheckResult) {
//Применим её
options = _.cloneDeep(resBefore.options);
if (resBefore.blMsg) prms.queue.blMsg = resBefore.blMsg;
} else {
//Или расскажем об ошибке
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
}
}
//Отправляем сообщение удалённому серверу
let serverResp = await rqp(options);
_.extend(prms, { serverResp });
//Выполняем обработчик "После"
let resAfter = null;
if (prms.function.sAppSrvAfter) {
const fnAfter = getAppSrvFunction(prms.function.sAppSrvAfter);
resAfter = await fnAfter(prms); //!!!!!!!!!!!!!!!! КОНТРОЛЬ ФОРМАТА РЕЗУЛЬТАТА
prms.queue.blResp = resAfter.blResp;
let resAfter = await fnAfter(prms);
//Проверяем структуру ответа функции предобработки
let sCheckResult = validateObject(
resAfter,
objOutQueueProcessorSchema.OutQueueProcessorFnAfter,
"Результат функции постобработки исходящего сообщения"
);
//Если структура ответа в норме
if (!sCheckResult) {
//Применим её
prms.queue.blResp = resAfter.blResp;
} else {
//Или расскажем об ошибке
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
}
} else {
prms.queue.blResp = new Buffer(serverResp.toString());
}

View File

@ -93,3 +93,41 @@ exports.OutQueueProcessorTaskResult = new Schema({
}).validator({
required: val => typeof val != "undefined"
});
//Схема валидации результата работы функции "предобработки" сообщения очереди сервером приложений
exports.OutQueueProcessorFnBefore = new Schema({
//Параметры запроса удалённому сервису
options: {
type: Object,
required: true,
message: {
type: path =>
`Параметры запроса удалённому сервису (${path}) имеют некорректный тип данных (ожидалось - Object, см. документацию к REQUEST - https://github.com/request/request)`,
required: path => `Не указаны параметры запроса удалённому сервису (${path})`
}
},
//Обработанное сообщение очереди
blMsg: {
type: Buffer,
required: false,
message: {
type: path =>
`Обработанное сообщение очереди (${path}) имеет некорректный тип данных (ожидалось - Buffer)`,
required: path => `Не указано обработанное сообщение очереди (${path})`
}
}
});
//Схема валидации результата работы функции "постобработки" сообщения очереди сервером приложений
exports.OutQueueProcessorFnAfter = new Schema({
//Результат обработки ответа удалённого сервиса
blResp: {
type: Buffer,
required: true,
message: {
type: path =>
`Результат обработки ответа удалённого сервиса (${path}) имеет некорректный тип данных (ожидалось - Buffer)`,
required: path => `Не указан результат обработки ответа удалённого сервиса (${path})`
}
}
});