Здравствуйте. Есть необходимость написать модуль, который работает с БД MS SQL, и, как вы понимаете, инициализируется асинхронно. Кроме того, этот модуль подтягивает настройки приложения из БД. Есть нечто такое:
Модуль
// SQL может генерировать более 1 ошибки. Для их чтения смотрим err.precedingErrors
const sql = require('mssql');
const config = require('./config');
const qPreference = `SELECT [code], [value] FROM [setting] WHERE [type] != 'section' FOR JSON AUTO`
class AppSql{
constructor(){
this.sqlConfig = {
...
};
this._pool = null;
}
async init(){
try {
this._pool = await new sql.ConnectionPool(this.sqlConfig).connect();
const request = this._pool.request();
const result = await request.query(qPreference);
let resJSON = result.recordset[0];
if(!resJSON) resJSON = [];
config.loadData(resJSON);
} catch (err) {
console.log( 'AppSql.constructor error.');
}
}
}
// Экспорт инстанса
module.exports = new AppSql();
Вызов модуля в приложении:
const express = require('express');
const config = require('./class/config');
const app = express();
const sql = require('./class/appsql');
await sql.init();
// Тестовый обработчик запросов
app.get('/', async (req, res, next) => {
res.status(200).send('api run');
});
const port = process.env.PORT || config.getKey('apiPort');
app.listen(port, (err, req, res) => {
LOG.logInfo( "Application started at port: " + port );
});
Во время запуска выдает ошибку:
await sql.init();
^^^^^
SyntaxError: await is only valid in async function
...
[nodemon] app crashed - waiting for file changes before starting...
В чем ошибка и как сделать правильно?