Стратегия, которую я успешно использую в нескольких производственных приложениях, заключается в определении логики подключения к базе данных в одном файле, подобном следующему:
database.js
const dbClient = require('some-db-client')
let db
module.exports.connectDB = async () => {
const client = await dbClient.connect(<DB_URL>)
db = client.db()
}
module.exports.getDB = () => {
return db
}
Очевидно, что логика подключения должна быть более сложной, чем та, которую я определил выше, но вы можете понять, что вам нужно подключиться к вашей базе данных, используя любую клиентскую библиотеку базы данных, которую вы выберете, и сохранить ссылку на нее.тот единственный экземпляр вашей базы данных.Затем, где бы вам ни пришлось взаимодействовать с вашей базой данных, вы можете вызвать функцию getDB
.Но сначала вам нужно будет вызвать функцию connectDB
из файла ввода приложения вашего сервера.
server.js
async function run() {
const db = require('./database')
await db.connectDB()
const app = require('express')()
const routes = require('./routes')
app.use('/', routes)
app.listen(3000, () => {
console.log('App server listening to port 3000')
})
}
Вы бы сделаливызов для инициализации соединения с вашей базой данных в файле записи приложения сервера перед инициализацией express
.После этого любое место в вашем приложении, которому необходим доступ к базе данных, может просто вызвать функцию getDB()
и использовать возвращаемый объект базы данных по мере необходимости.Это не требует чрезмерно сложной логики открытия и закрытия соединений и экономит накладные расходы на постоянное открытие и закрытие соединений, когда вы хотите получить доступ к базе данных, поддерживая только одно соединение с базой данных, которое можно использовать где угодно.