我正在使用 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)
}
)
我还没有看到类似的东西,所以我认为这不是一个好方法。
有什么想法吗?
最佳答案
我在多个生产应用程序中广泛使用并取得巨大成功的策略是在类似于以下内容的单个文件中定义数据库连接逻辑:
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()
函数,并根据需要从那里使用返回的数据库对象。这不需要过于复杂的连接打开和关闭逻辑,并且只需维护一个可在任何地方使用的单个数据库连接,从而节省了在您想要访问数据库时不断打开和关闭连接的开销。
关于node.js - 如何使用 express 保留数据库的一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712028/