forked from CITKParus/P8-ExchangeService
Валидация результатов исполнения функций пост и пред обработки сервером приложений исходящих сообщений
This commit is contained in:
parent
bc0cd5493f
commit
0de8425e05
@ -96,18 +96,44 @@ const appProcess = async prms => {
|
|||||||
//Выполняем обработчик "До" (если он есть)
|
//Выполняем обработчик "До" (если он есть)
|
||||||
if (prms.function.sAppSrvBefore) {
|
if (prms.function.sAppSrvBefore) {
|
||||||
const fnBefore = getAppSrvFunction(prms.function.sAppSrvBefore);
|
const fnBefore = getAppSrvFunction(prms.function.sAppSrvBefore);
|
||||||
let resBefore = await fnBefore(prms); //!!!!!!!!!!!!!!!! КОНТРОЛЬ ФОРМАТА РЕЗУЛЬТАТА
|
let resBefore = await fnBefore(prms);
|
||||||
options = _.cloneDeep(resBefore.options);
|
//Проверяем структуру ответа функции предобработки
|
||||||
|
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);
|
let serverResp = await rqp(options);
|
||||||
_.extend(prms, { serverResp });
|
_.extend(prms, { serverResp });
|
||||||
//Выполняем обработчик "После"
|
//Выполняем обработчик "После"
|
||||||
let resAfter = null;
|
|
||||||
if (prms.function.sAppSrvAfter) {
|
if (prms.function.sAppSrvAfter) {
|
||||||
const fnAfter = getAppSrvFunction(prms.function.sAppSrvAfter);
|
const fnAfter = getAppSrvFunction(prms.function.sAppSrvAfter);
|
||||||
resAfter = await fnAfter(prms); //!!!!!!!!!!!!!!!! КОНТРОЛЬ ФОРМАТА РЕЗУЛЬТАТА
|
let resAfter = await fnAfter(prms);
|
||||||
prms.queue.blResp = resAfter.blResp;
|
//Проверяем структуру ответа функции предобработки
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
resAfter,
|
||||||
|
objOutQueueProcessorSchema.OutQueueProcessorFnAfter,
|
||||||
|
"Результат функции постобработки исходящего сообщения"
|
||||||
|
);
|
||||||
|
//Если структура ответа в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
//Применим её
|
||||||
|
prms.queue.blResp = resAfter.blResp;
|
||||||
|
} else {
|
||||||
|
//Или расскажем об ошибке
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
prms.queue.blResp = new Buffer(serverResp.toString());
|
prms.queue.blResp = new Buffer(serverResp.toString());
|
||||||
}
|
}
|
||||||
|
@ -93,3 +93,41 @@ exports.OutQueueProcessorTaskResult = new Schema({
|
|||||||
}).validator({
|
}).validator({
|
||||||
required: val => typeof val != "undefined"
|
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