Настройка пн goose БД в комплексе Express JS - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь найти оптимальное решение для работы с БД goose в приложении Expess. Потому что в каждом уроке все логи c в одном файле, и я не нашел ни одного сложного примера.

Я создал класс БД, где я подключаюсь / отключаюсь от БД

const server = process.env.SERVER_LOCAL;
let _db: mongoose.Mongoose = null;

export function initDB() {
    if (!_db) {
        try {
            mongoose.connect(server, {
                useNewUrlParser: true,
                useUnifiedTopology: true,
                useFindAndModify: false
            });
            _db = mongoose;
        } catch (ex) {
            throw new Error(`Problem with DB connection: ${ex}`);
        }
    }
    console.log(_db);
}

export function getDB(): mongoose.Mongoose {
    return _db;
}

export function disconnectDB() {
    if (_db) {
        _db.disconnect();
    }
    console.log('disconnect from DB ...');
}

В индексном файле я инициализирую соединение БД, а при сигнале SIGINT закрываю соединение с БД

....

app.use('/api/v1/common', commonRouter);
const port = process.env.PORT || 5000;

app.listen(port, () => {
  initDB();
  if (!getDB()) {
    console.log('Problem with DB connection ...');
  }
  console.log(`Listen on port: ${port}`);
});

process.on('SIGINT', () => {
  console.log('Application is ended.');
  disconnectDB();
}) 

И я создал некоторый маршрут, а в файле маршрутизатора у меня есть некоторые вызовы API с db connection.

1 endpoint with DB connection

router.get('/user/, (req,res) => {

_db = getDB();

db.model('.... 

});

2 endpoint with DB connection

router.get('/people/, (req,res) => {

_db = getDB();

db.model('.... 

});

И мой вопрос, если это хороший способ создать класс для БД и инициализировать БД в методе listen. При каждом вызове API получайте дБ соединение и отключайте его на SIGINT. Или я должен создать соединение / разъединение в каждой конечной точке и выбрасывать класс БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...