Я пытаюсь найти оптимальное решение для работы с БД 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. Или я должен создать соединение / разъединение в каждой конечной точке и выбрасывать класс БД?