From edda9c0e3b1dc499200319453f47fa208d4758e9 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 17 Nov 2018 18:14:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8B=D1=85=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BA=20=D0=B2=D0=B8=D0=B4=D1=83=20xName,=20=D0=B3=D0=B4=D0=B5?= =?UTF-8?q?=20x=20-=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B3=D0=B5=D1=80=D0=B0=20=D0=BA=20?= =?UTF-8?q?=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/constants.js | 16 +-- core/db_connector.js | 226 ++++++++++++++++++++++--------------- core/logger.js | 147 +++++++++++++++++------- core/server_errors.js | 7 +- core/utils.js | 64 ++++++----- index.js | 4 + modules/parus_oracle_db.js | 2 +- test.js | 51 ++++++++- 8 files changed, 337 insertions(+), 180 deletions(-) create mode 100644 index.js diff --git a/core/constants.js b/core/constants.js index 97f3a0e..a87a041 100644 --- a/core/constants.js +++ b/core/constants.js @@ -8,17 +8,17 @@ //----------------- //Путь к модулям -exports.MODULES_PATH_CORE = "@core"; //Модули ядра -exports.MODULES_PATH_EX = "@modules"; //Дополнительные пользовательские модули +exports.SMODULES_PATH_CORE = "@core"; //Модули ядра +exports.SMODULES_PATH_EX = "@modules"; //Дополнительные пользовательские модули //Типовые коды ошибок подключения модулей -exports.ERR_MODULES_NO_MODULE_SPECIFIED = "ERR_MODULES_NO_MODULE_SPECIFIED"; //Не указан подключаемый модуль -exports.ERR_MODULES_BAD_INTERFACE = "ERR_MODULES_BAD_INTERFACE"; //Ошибочный интерфейс подключаемого модуля +exports.SERR_MODULES_NO_MODULE_SPECIFIED = "ERR_MODULES_NO_MODULE_SPECIFIED"; //Не указан подключаемый модуль +exports.SERR_MODULES_BAD_INTERFACE = "ERR_MODULES_BAD_INTERFACE"; //Ошибочный интерфейс подключаемого модуля //Типовые коды ошибок работы с объектами -exports.ERR_OBJECT_BAD_INTERFACE = "ERR_OBJECT_BAD_INTERFACE"; //Ошибочный интерфейс объекта +exports.SERR_OBJECT_BAD_INTERFACE = "ERR_OBJECT_BAD_INTERFACE"; //Ошибочный интерфейс объекта //Типовые коды ошибок работы с БД -exports.ERR_DB_CONNECT = "ERR_DB_CONNECT"; //Ошибка подключения к БД -exports.ERR_DB_DISCONNECT = "ERR_DB_DISCONNECT"; //Ошибка отключения от БД -exports.ERR_DB_EXECUTE = "ERR_DB_EXECUTE"; //Ошибка исполнения функции в БД +exports.SERR_DB_CONNECT = "ERR_DB_CONNECT"; //Ошибка подключения к БД +exports.SERR_DB_DISCONNECT = "ERR_DB_DISCONNECT"; //Ошибка отключения от БД +exports.SERR_DB_EXECUTE = "ERR_DB_EXECUTE"; //Ошибка исполнения функции в БД diff --git a/core/db_connector.js b/core/db_connector.js index 62c51f5..f92726d 100644 --- a/core/db_connector.js +++ b/core/db_connector.js @@ -8,9 +8,9 @@ //---------------------- const _ = require("lodash"); //Работа с массивами и объектами -const glConst = require("@core/constants.js"); //Глобальные константы -const { checkModuleInterface, makeModuleFullPath, checkObject } = require("@core/utils.js"); //Вспомогательные функции -const { ServerError } = require("@core/server_errors.js"); //Типовая ошибка +const glConst = require("../core/constants.js"); //Глобальные константы +const { ServerError } = require("../core/server_errors.js"); //Типовая ошибка +const { checkModuleInterface, makeModuleFullPath, checkObject } = require("../core/utils.js"); //Вспомогательные функции //---------- // Константы @@ -29,17 +29,17 @@ class DBConnector { //Конструктор constructor(prms) { //Проверяем структуру переданного объекта для подключения - let checkResult = checkObject(prms, { + let sCheckResult = checkObject(prms, { fields: [ - { name: "sUser", required: true }, - { name: "sPassword", required: true }, - { name: "sConnectString", required: true }, - { name: "sSessionModuleName", required: true }, - { name: "sConnectorModule", required: false } + { sName: "sUser", bRequired: true }, + { sName: "sPassword", bRequired: true }, + { sName: "sConnectString", bRequired: true }, + { sName: "sSessionModuleName", bRequired: true }, + { sName: "sConnectorModule", bRequired: false } ] }); //Если структура объекта в норме - if (!checkResult) { + if (!sCheckResult) { //Проверяем наличие модуля для работы с БД в настройках подключения if (prms.sConnectorModule) { //Подключим модуль @@ -60,7 +60,7 @@ class DBConnector { }) ) { throw new ServerError( - glConst.ERR_MODULES_BAD_INTERFACE, + glConst.SERR_MODULES_BAD_INTERFACE, "Модуль " + prms.sConnectorModule + " реализует неверный интерфейс!" ); } @@ -69,121 +69,167 @@ class DBConnector { _.extend(this.connectSettings, prms); //Инициализируем остальные свойства this.connection = {}; + this.bConnected = false; } else { throw new ServerError( - glConst.ERR_MODULES_NO_MODULE_SPECIFIED, + glConst.SERR_MODULES_NO_MODULE_SPECIFIED, "Не указано имя подключаемого модуля-коннектора!" ); } } else { throw new ServerError( - glConst.ERR_OBJECT_BAD_INTERFACE, - "Объект имеет недопустимый интерфейс: " + checkResult + glConst.SERR_OBJECT_BAD_INTERFACE, + "Объект имеет недопустимый интерфейс: " + sCheckResult ); } } //Подключиться к БД async connect() { try { - this.connection = await this.connector.connect({ - sUser: this.connectSettings.sUser, - sPassword: this.connectSettings.sPassword, - sConnectString: this.connectSettings.sConnectString, - sSessionModuleName: this.connectSettings.sSessionModuleName - }); + this.connection = await this.connector.connect(this.connectSettings); + this.bConnected = true; return this.connection; } catch (e) { - throw new ServerError(glConst.ERR_DB_CONNECT, e.message); + throw new ServerError(glConst.SERR_DB_CONNECT, e.message); } } //Отключиться от БД async disconnect() { - try { - await this.connector.disconnect({ connection: this.connection }); - this.connection = {}; - return; - } catch (e) { - throw new ServerError(glConst.ERR_DB_DISCONNECT, e.message); + if (this.bConnected) { + try { + await this.connector.disconnect({ connection: this.connection }); + this.connection = {}; + this.bConnected = false; + return; + } catch (e) { + throw new ServerError(glConst.SERR_DB_DISCONNECT, e.message); + } } } //Получить список сервисов async getServices() { - try { - let srvs = await this.connector.getServices({ connection: this.connection }); - let srvsFuncs = srvs.map(async srv => { - const response = await this.connector.getServiceFunctions({ - connection: this.connection, - ddd: srv.NRN + if (this.bConnected) { + try { + let srvs = await this.connector.getServices({ connection: this.connection }); + let srvsFuncs = srvs.map(async srv => { + const response = await this.connector.getServiceFunctions({ + connection: this.connection, + nServiceId: srv.nId + }); + let tmp = {}; + _.extend(tmp, srv, { functions: [] }); + response.map(f => { + tmp.functions.push(f); + }); + return tmp; }); - let tmp = {}; - _.extend(tmp, srv, { FN: [] }); - response.map(f => { - tmp.FN.push(f); - }); - return tmp; - }); - let res = await Promise.all(srvsFuncs); - return res; - } catch (e) { - throw new ServerError(glConst.ERR_DB_EXECUTE, e.message); + let res = await Promise.all(srvsFuncs); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); + } + } else { + throw new ServerError(glConst.SERR_DB_EXECUTE, "Нет подключения к БД"); } } //Запись в журнал работы async putLog(prms) { - //Проверяем структуру переданного объекта для подключения - let checkResult = checkObject(prms, { - fields: [ - { name: "nLogState", required: true }, - { name: "sMsg", required: false }, - { name: "nServiceId", required: false }, - { name: "nServiceFnId", required: false }, - { name: "nQueueId", required: false } - ] - }); - //Если структура объекта в норме - if (!checkResult) { - try { - let res = await this.connector.log({ - connection: this.connection, - nLogState: prms.nLogState, - sMsg: prms.sMsg, - nServiceId: prms.nServiceId, - nServiceFnId: prms.nServiceFnId, - nQueueId: prms.nQueueId - }); - return res; - } catch (e) { - throw new ServerError(glConst.ERR_DB_EXECUTE, e.message); + if (this.bConnected) { + //Проверяем структуру переданного объекта для подключения + let sCheckResult = checkObject(prms, { + fields: [ + { sName: "nLogState", bRequired: true }, + { sName: "sMsg", bRequired: false }, + { sName: "nServiceId", bRequired: false }, + { sName: "nServiceFnId", bRequired: false }, + { sName: "nQueueId", bRequired: false } + ] + }); + //Если структура объекта в норме + if (!sCheckResult) { + try { + let logData = { connection: this.connection }; + _.extend(logData, prms); + let res = await this.connector.log(logData); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); + } + } else { + throw new ServerError( + glConst.SERR_OBJECT_BAD_INTERFACE, + "Объект имеет недопустимый интерфейс: " + sCheckResult + ); } } else { - throw new ServerError( - glConst.ERR_OBJECT_BAD_INTERFACE, - "qqqОбъект имеет недопустимый интерфейс: " + checkResult - ); + throw new ServerError(glConst.SERR_DB_EXECUTE, "Нет подключения к БД"); + } + } + //Запись информации в журнал работы + async putLogInf(sMsg, prms) { + let logData = {}; + _.extend(logData, prms); + logData.nLogState = NLOG_STATE_INF; + logData.sMsg = sMsg; + try { + let res = await this.putLog(logData); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); + } + } + //Запись предупреждения в журнал работы + async putLogWrn(sMsg, prms) { + let logData = {}; + _.extend(logData, prms); + logData.nLogState = NLOG_STATE_WRN; + logData.sMsg = sMsg; + try { + let res = await this.putLog(logData); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); + } + } + //Запись ошибки в журнал работы + async putLogErr(sMsg, prms) { + let logData = {}; + _.extend(logData, prms); + logData.nLogState = NLOG_STATE_ERR; + logData.sMsg = sMsg; + try { + let res = await this.putLog(logData); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); } } //Считать очередную порцию исходящих сообщений async getOutgoing(prms) { - //Проверяем структуру переданного объекта для подключения - let checkResult = checkObject(prms, { - fields: [{ name: "nPortionSize", required: true }] - }); - //Если структура объекта в норме - if (!checkResult) { - try { - let res = await this.connector.getQueueOutgoing({ - connection: this.connection, - nPortionSize: prms.nPortionSize - }); - return res; - } catch (e) { - throw new ServerError(glConst.ERR_DB_EXECUTE, e.message); + if (this.bConnected) { + //Проверяем структуру переданного объекта для подключения + let sCheckResult = checkObject(prms, { + fields: [{ sName: "nPortionSize", bRequired: true }] + }); + //Если структура объекта в норме + if (!sCheckResult) { + try { + let res = await this.connector.getQueueOutgoing({ + connection: this.connection, + nPortionSize: prms.nPortionSize + }); + return res; + } catch (e) { + throw new ServerError(glConst.SERR_DB_EXECUTE, e.message); + } + } else { + throw new ServerError( + glConst.SERR_OBJECT_BAD_INTERFACE, + "Объект имеет недопустимый интерфейс: " + sCheckResult + ); } } else { - throw new ServerError( - glConst.ERR_OBJECT_BAD_INTERFACE, - "Объект имеет недопустимый интерфейс: " + checkResult - ); + throw new ServerError(glConst.SERR_DB_EXECUTE, "Нет подключения к БД"); } } } diff --git a/core/logger.js b/core/logger.js index 9727c0e..a757ae7 100644 --- a/core/logger.js +++ b/core/logger.js @@ -3,76 +3,141 @@ Модуль ядра: протоколирование работы */ +//---------------------- +// Подключение библиотек +//---------------------- + +const _ = require("lodash"); //Работа с массивами и объектами +const db = require("../core/db_connector.js"); //Модуль взаимодействия с БД + //------------ // Тело модуля //------------ -//Тип сообщения протокола - ошибка -const LOGGER_MESSAGE_TYPE_ERROR = "ERROR"; - -//Тип сообщения протокола - предупреждение -const LOGGER_MESSAGE_TYPE_WARN = "WARN"; - -//Тип сообщения протокола - информация -const LOGGER_MESSAGE_TYPE_INFO = "INFO"; +//Типы сообщений протокола +const SLOGGER_MESSAGE_TYPE_ERROR = "ERROR"; // Ошибка +const SLOGGER_MESSAGE_TYPE_WARN = "WARN"; // Предупреждение +const SLOGGER_MESSAGE_TYPE_INFO = "INFO"; // Информация //Сообщение протокола class LoggerMessage { //Конструктор класса - constructor(type, message) { - this.type = type; - this.message = message; + constructor(sType, sMessage, prms) { + this.sType = sType; + this.sMessage = sMessage; + if (prms) { + this.nServiceId = prms.nServiceId; + this.nServiceFnId = prms.nServiceFnId; + this.nQueueId = prms.nQueueId; + } } } //Класс управления протоколом class Logger { //Конструктор класса - constructor() {} - //Протоколирование ошибки - error(msg) { - this.log(new LoggerMessage(LOGGER_MESSAGE_TYPE_ERROR, msg)); + constructor() { + this.dbConnector = ""; + this.bLogDB = false; } - //Протоколирование предупреждения - warn(msg) { - this.log(new LoggerMessage(LOGGER_MESSAGE_TYPE_WARN, msg)); + //Включение/выключение записи протоколов в БД + setLogDB(bLogDB) { + this.bLogDB = bLogDB; } - //Протоколирование информации - info(msg) { - this.log(new LoggerMessage(LOGGER_MESSAGE_TYPE_INFO, msg)); + //Установка объекта для протоколирования в БД + setDBConnector(dbConnector) { + if (dbConnector instanceof db.DBConnector) { + this.dbConnector = dbConnector; + this.bLogDB = true; + } + } + //Протоколирование в БД + async logToDB(loggerMessage) { + //Если надо протоколировать и есть чем + console.log(this.dbConnector.bConnected); + console.log("DB LOGGER IN"); + if (this.bLogDB && this.dbConnector && this.dbConnector.bConnected) { + //Если протоколируем стандартное сообщение + if (loggerMessage instanceof LoggerMessage) { + //Подготовим доп. сведения для протокола + let logData = {}; + _.extend(logData, loggerMessage); + //Анализируем тип сообщения + switch (loggerMessage.sType) { + case SLOGGER_MESSAGE_TYPE_ERROR: { + await this.dbConnector.putLogErr(loggerMessage.sMessage, logData); + break; + } + case SLOGGER_MESSAGE_TYPE_WARN: { + await this.dbConnector.putLogWrn(loggerMessage.sMessage, logData); + break; + } + case SLOGGER_MESSAGE_TYPE_INFO: { + await this.dbConnector.putLogInf(loggerMessage.sMessage, logData); + break; + } + default: + await this.dbConnector.putLogInf(loggerMessage.sMessage, logData); + break; + } + } else { + //Для нестандартных - есдиный способ протоколирования + await this.dbConnector.putLogInf(loggerMessage); + } + } + console.log("DB LOGGER OUT"); } //Протоколирование - log(loggerMessage) { - let message = ""; - let prefix = "LOG MESSAGE"; - let colorPattern = ""; + async log(loggerMessage) { + let sMessage = ""; + let sPrefix = "LOG MESSAGE"; + let sColorPattern = ""; //Конструируем сообщение if (loggerMessage instanceof LoggerMessage) { - switch (loggerMessage.type) { - case LOGGER_MESSAGE_TYPE_ERROR: { - prefix = "ERROR"; - colorPattern = "\x1b[31m%s\x1b[0m%s"; + switch (loggerMessage.sType) { + case SLOGGER_MESSAGE_TYPE_ERROR: { + sPrefix = "ERROR"; + sColorPattern = "\x1b[31m%s\x1b[0m%s"; break; } - case LOGGER_MESSAGE_TYPE_WARN: { - prefix = "WARNING"; - colorPattern = "\x1b[33m%s\x1b[0m%s"; + case SLOGGER_MESSAGE_TYPE_WARN: { + sPrefix = "WARNING"; + sColorPattern = "\x1b[33m%s\x1b[0m%s"; break; } - case LOGGER_MESSAGE_TYPE_INFO: { - prefix = "INFORMATION"; - colorPattern = "\x1b[32m%s\x1b[0m%s"; + case SLOGGER_MESSAGE_TYPE_INFO: { + sPrefix = "INFORMATION"; + sColorPattern = "\x1b[32m%s\x1b[0m%s"; break; } default: break; } - message = loggerMessage.message; + sMessage = loggerMessage.sMessage; } else { - message = loggerMessage; + sMessage = loggerMessage; } //Выдаём сообщение - console.log(colorPattern, prefix + ": ", message); + console.log(sColorPattern, sPrefix + ": ", sMessage); + //Протоколируем в БД, если это необходимо + if (this.bLogDB) + try { + await this.logToDB(loggerMessage); + } catch (e) { + console.log("LOGGER ERROR: " + e.sMessage); + } + } + //Протоколирование ошибки + async error(sMsg) { + await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_ERROR, sMsg)); + } + //Протоколирование предупреждения + async warn(sMsg) { + await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_WARN, sMsg)); + } + //Протоколирование информации + async info(sMsg) { + await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_INFO, sMsg)); } } @@ -80,8 +145,8 @@ class Logger { // Интерфейс модуля //----------------- -exports.LOGGER_MESSAGE_TYPE_ERROR = LOGGER_MESSAGE_TYPE_ERROR; -exports.LOGGER_MESSAGE_TYPE_WARN = LOGGER_MESSAGE_TYPE_WARN; -exports.LOGGER_MESSAGE_TYPE_INFO = LOGGER_MESSAGE_TYPE_INFO; +exports.SLOGGER_MESSAGE_TYPE_ERROR = SLOGGER_MESSAGE_TYPE_ERROR; +exports.SLOGGER_MESSAGE_TYPE_WARN = SLOGGER_MESSAGE_TYPE_WARN; +exports.SLOGGER_MESSAGE_TYPE_INFO = SLOGGER_MESSAGE_TYPE_INFO; exports.LoggerMessage = LoggerMessage; exports.Logger = Logger; diff --git a/core/server_errors.js b/core/server_errors.js index 6ba9978..795167f 100644 --- a/core/server_errors.js +++ b/core/server_errors.js @@ -10,9 +10,10 @@ //Общая ошибка системы class ServerError extends Error { //Конструктор - constructor(code, message) { - super(message); - this.code = code; + constructor(sCode, sMessage) { + super(sMessage); + this.sMessage = sMessage; + this.sCode = sCode; } } diff --git a/core/utils.js b/core/utils.js index 9b1c10b..b2a9995 100644 --- a/core/utils.js +++ b/core/utils.js @@ -7,63 +7,63 @@ // Подключение библиотек //---------------------- -const { MODULES_PATH_EX } = require("@core/constants.js"); //Глобавльные константы системы +const { SMODULES_PATH_EX } = require("../core/constants.js"); //Глобавльные константы системы //------------ // Тело модуля //------------ //Проверка на функцию -const isFunction = functionToCheck => { - let fnStr = {}.toString.call(functionToCheck); - return functionToCheck && (fnStr === "[object Function]" || fnStr === "[object AsyncFunction]"); +const isFunction = fnToCheck => { + let sFn = {}.toString.call(fnToCheck); + return fnToCheck && (sFn === "[object Function]" || sFn === "[object AsyncFunction]"); }; //Проверка объекта на наличие списка функций const haveFunctions = (obj, list) => { //Объявим результат - let res = true; + let bRes = true; //Если есть что проверять if (obj && list) { //И если пришел массив наименований функций if (Array.isArray(list)) { - list.forEach(fn => { - if (!isFunction(obj[fn])) res = false; + list.forEach(sFnName => { + if (!isFunction(obj[sFnName])) bRes = false; }); } else { - res = false; + bRes = false; } } else { - res = false; + bRes = false; } //Вернем результат - return res; + return bRes; }; //Проверка корректности интерфейса модуля const checkModuleInterface = (module, interface) => { //Объявим результат - let res = true; + let bRes = true; //Если есть что проверять if (module && interface) { //Eсли есть список функций if (interface.functions) { //Проверим их наличие - res = haveFunctions(module, interface.functions); + bRes = haveFunctions(module, interface.functions); } else { - res = false; + bRes = false; } } else { - res = false; + bRes = false; } //Вернем результат - return res; + return bRes; }; //Проверка корректности полей объекта const checkObject = (obj, interface) => { //Объявим результат - let res = ""; + let sRes = ""; //Если есть что проверять if (obj && interface) { //Eсли есть список полей для проверки @@ -74,41 +74,43 @@ const checkObject = (obj, interface) => { //Обходим проверяемые поля interface.fields.forEach(fld => { //Проверим наличие поля в объекте (только для обязательных) - if (fld.required && !(fld.name in obj)) { + if (fld.bRequired && !(fld.sName in obj)) { //Поля нет - noFields.push(fld.name); + noFields.push(fld.sName); } else { //Поле есть, проверим наличие значения if ( - fld.required && - (obj[fld.name] === "undefined" || obj[fld.name] === null || obj[fld.name] === "") + fld.bRequired && + (obj[fld.sName] === "undefined" || obj[fld.sName] === null || obj[fld.sName] === "") ) //Обязательное поле не содержит значения - noValues.push(fld.name); + noValues.push(fld.sName); } }); //Сформируем итоговое сообщение - if (noFields.length > 0) res = "Объект не содержит полей: " + noFields.join(", "); + if (noFields.length > 0) sRes = "Объект не содержит полей: " + noFields.join(", "); if (noValues.length > 0) - res += - (res == "" ? "" : "; ") + "Обязательные поля объекта не имеют значений: " + noValues.join(", "); + sRes += + (sRes == "" ? "" : "; ") + + "Обязательные поля объекта не имеют значений: " + + noValues.join(", "); } else { - res = "Список проверяемых полей объекта не является массивом"; + sRes = "Список проверяемых полей объекта не является массивом"; } } else { - res = "Не указан список проверяемых полей объекта"; + sRes = "Не указан список проверяемых полей объекта"; } } else { - res = "Не указан проверяемый объект и/или его интерфейс"; + sRes = "Не указан проверяемый объект и/или его интерфейс"; } //Вернем результат - return res; + return sRes; }; //Формирование полного пути к подключаемому модулю -const makeModuleFullPath = moduleName => { - if (moduleName) { - return MODULES_PATH_EX + "/" + moduleName; +const makeModuleFullPath = sModuleName => { + if (sModuleName) { + return SMODULES_PATH_EX + "/" + sModuleName; } else { return ""; } diff --git a/index.js b/index.js new file mode 100644 index 0000000..776a26b --- /dev/null +++ b/index.js @@ -0,0 +1,4 @@ +/* + Сервис интеграции ПП Парус 8 с WEB API + Точка входа в сервер приложений +*/ diff --git a/modules/parus_oracle_db.js b/modules/parus_oracle_db.js index 5779319..1ff87a2 100644 --- a/modules/parus_oracle_db.js +++ b/modules/parus_oracle_db.js @@ -134,7 +134,7 @@ const getServiceFunctions = prms => { } ); } else { - reject(new Error("Не указан идентификатор сервиса")); + reject(new Error("Не указан идентификатор сервиса (отсутствует поле: nServiceId)")); } } else { reject(new Error("Не указано подключение (отсутствует поле: connection)")); diff --git a/test.js b/test.js index a7ce4c0..4a6f11a 100644 --- a/test.js +++ b/test.js @@ -1,6 +1,6 @@ /* Сервис интеграции ПП Парус 8 с WEB API - Точка входа в сервер приложений + Песочница для тестов */ //---------------------- @@ -9,15 +9,54 @@ require("module-alias/register"); const cfg = require("./config.js"); -const { Logger } = require("@core/logger.js"); -const db = require("@core/db_connector.js"); -const { ServerError } = require("@core/server_errors.js"); -const utls = require("@core/utils.js"); +const { Logger } = require("./core/logger.js"); +const db = require("./core/db_connector.js"); +const { ServerError } = require("./core/server_errors.js"); +const utls = require("./core/utils.js"); //------------ // Тело модуля //------------ +const tests = async () => { + let a = new db.DBConnector(cfg.dbConnect); + let l = new Logger(); + l.setDBConnector(a); + try { + //await l.warn("CONNECTING..."); + await a.connect(); + //await l.info("CONNECTED!"); + //await l.warn("READING SERVICES..."); + let srv = await a.getServices(); + //await l.info(srv); + console.log("1"); + await l.warn("DISCONNECTING..."); + console.log("2"); + await a.disconnect(); + console.log("3"); + await l.error("DISCONNECTED!"); + console.log("4"); + } catch (e) { + await l.error("DISCONNECTING ON ERROR: " + e.message + "..."); + await a.disconnect(); + await l.error("DISCONNECTED!"); + throw e; + } +}; + +tests() + .then(r => { + if (r) console.log(r); + else console.log("SUCCESS!!!"); + }) + .catch(e => { + if (e instanceof ServerError) { + console.log("ServerError ERROR: " + e.sMessage); + } else { + console.log("ERROR: " + e.message); + } + }); +/* try { let a = new db.DBConnector(cfg.dbConnect); a.connect() @@ -32,7 +71,7 @@ try { } else { console.log("NO MESSAGES IN QUEUE!!!"); } - a.putLog({ nLogState: db.NLOG_STATE_INF, sMsg: "Сервер приложений подключен" }) + a.putLogErr() .then(res => { console.log(res); setTimeout(() => {