Спасибо за подсказку. Node.js для меня внове и потому логика приложений до меня туговато доходит.
Сделал так как вы советовали и без привлечения внешних ресурсов.
Конструктор сделал синхронным, асинхронная инициалазация вынесена в асинхронные же функции. Инициализацию выполнил в самовызывающейся анонимной функции:
Модуль SQL
async init(){
try {
this._pool = await new sql.ConnectionPool(this.sqlConfig).connect();
this._pool.on('error', (err) => {
LOG.logError( MSG.fgetMsg('eSqlCommon', err.stack) );
})
LOG.logInfo( MSG.getMsg('iSqlConnected') );
} catch (err) {
LOG.logError( 'AppSql.constructor. \n' + MSG.fgetMsg('eSqlConnect', err.stack) );
}
}
async loadPreferences(){
try {
const request = this._pool.request();
const result = await request.query(qPreference);
let resJSON = result.recordset[0];
if(!resJSON) resJSON = [];
config.loadData(resJSON);
LOG.logDebug( "AppSql.loadPreferences\n" + MSG.fgetMsg('mConfigRead', qPreference, resJSON.length, config.toString()) );
} catch (error) {
LOG.logError( "AppSql.loadPreferences\n" + MSG.fgetMsg('mConfigRead', error) );
}
}
главный модуль приложения:
const express = require('express');
const sanitizer = require('express-sanitizer');
const config = require('./class/config');
const app = express();
const LOG = require('./class/logger');
const sql = require('./class/appsql');
const apputil = require('./class/apputil');
const RouteRegistrator = require('./class/routeregistrator');
app.use(express.json());
// Корневой обработчик запросов. Для красоты
app.get('/', async (req, res, next) => {
res.status(200).send('api run');
next();
});
// Асинхронная инициализация приложения
(async () => {
// Инициализируем SQL и читаем настройки приложения
await sql.init();
await sql.loadPreferences();
// Регистрируем роуты
const reg = new RouteRegistrator(app);
reg.register();
// Глобальный обработчик ошибок.
apputil.initGlobalErrorHandler(app, LOG);
// Запускаем сервер
const port = process.env.PORT || config.getKey('apiPort');
app.listen(port, (err, req, res) => {
LOG.logInfo( "Application started at port: " + port );
});
})();