Как сохранить один экземпляр базы данных, используя экспресс - PullRequest
0 голосов
/ 09 октября 2018

Я использую Express вместе с Sequelize для создания REST API.Я хочу сохранить только один экземпляр моей базы данных и использовать его во всех маршрутах, которые я могу создать.Моей первой мыслью было создать экземпляр, как только приложение запустится.Примерно так.

const express = require('express')
const databaseService = require( './services/database')
const config = require( './config')

const userRoute = require( './routes/user')

const app = express()

databaseService.connect(config.db_options).then(
    connectionInstance => {
        app.use('user', userRoute(connectionInstance))
        app.listen(3000)
    }
)

Я не видел ничего подобного, поэтому считаю, что это не очень хороший подход.

Есть идеи?

1 Ответ

0 голосов
/ 09 октября 2018

Стратегия, которую я успешно использую в нескольких производственных приложениях, заключается в определении логики подключения к базе данных в одном файле, подобном следующему:

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() и использовать возвращаемый объект базы данных по мере необходимости.Это не требует чрезмерно сложной логики открытия и закрытия соединений и экономит накладные расходы на постоянное открытие и закрытие соединений, когда вы хотите получить доступ к базе данных, поддерживая только одно соединение с базой данных, которое можно использовать где угодно.

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