Показать сообщение отдельно
  #5 (permalink)  
Старый 04.02.2020, 01:13
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Спасибо за подсказку. 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 );
	});
})();
Ответить с цитированием