From 0de8425e058a9452056d32351a576fe23f28b640 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 11 Dec 2018 17:04:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D1=82=20=D0=B8=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=D1=81?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D1=85=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/out_queue_processor.js | 36 +++++++++++++++++++++++++---- models/obj_out_queue_processor.js | 38 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/core/out_queue_processor.js b/core/out_queue_processor.js index 34abea6..ccac39f 100644 --- a/core/out_queue_processor.js +++ b/core/out_queue_processor.js @@ -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()); } diff --git a/models/obj_out_queue_processor.js b/models/obj_out_queue_processor.js index cad174f..eda8f03 100644 --- a/models/obj_out_queue_processor.js +++ b/models/obj_out_queue_processor.js @@ -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})` + } + } +});