Валидация результатов исполнения функций пост и пред обработки сервером приложений исходящих сообщений
This commit is contained in:
parent
bc0cd5493f
commit
0de8425e05
@ -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());
|
||||
}
|
||||
|
@ -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})`
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user