繁体   English   中英

如何使用express保留一个数据库实例

[英]How to keep one instance of the database using express

我正在使用 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)
    }
)

我还没有见过这样的事情,所以我相信这不是一个好方法。

有任何想法吗 ?

我在多个生产应用程序中广泛使用并取得巨大成功的一种策略是在类似于以下内容的单个文件中定义数据库连接逻辑:

数据库.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函数。

服务器.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()函数并根据需要从那里使用返回的数据库对象。 这不需要过于复杂的连接打开和关闭逻辑,并且通过只维护一个可以在任何地方使用的数据库连接来节省在您想要访问数据库时不断打开和关闭连接的开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM