node.js - Express Js - 按需连接MongoDB数据库
问题描述
我正在开发一个应用程序,该应用程序需要根据正在访问我的应用程序的客户连接到不同的 MongoDB 数据库。每个 MongoDB 数据库都位于不同的服务器上。
例如,如果我的应用程序有 3 个不同的客户:
- 约翰 (mongodb://john:john@server1/john)
- 汤姆 (mongodb://tom:tom@server2/tom)
- 哈利 (mongodb://harry:harry@server3/harry)
当 john 使用我的应用程序时,Express.js 应该连接到mongodb://john:john@server1/john
或者当 harry 使用我的应用程序时,它应该连接到mongodb://harry:harry@server3/harry
.
我想知道实现这一目标的优化方法是什么。通常,当我们只有一个 MongoDB 数据库实例时,我们将mongoose.connect
方法放在app.js
Express.js 服务器启动时调用的 and 中,但在这种情况下,我不想同时连接所有三个数据库,因为那样不会优化的方式。
解决方案
根据Mongoose 文档,它确实支持连接到多个主机。
const conn1 = mongoose.createConnection('host1', options)
const conn2 = mongoose.createConnection('host2', options)
让我举个例子(这是 Express 代码):
// CONNECTION SETTER MIDDLEWARE
app.use(async function (req, res, next) {
// Let's just assume you identified the user earlier with your favourite
// auth method and put their identity in req.user
const userCon = await mongoose.createConnection(`mongodb://${req.user.username}:${req.user.password}@${req.user.host}/${req.user.database}`) // Here you have it!
// Saving the connection in the request so the next
// middlewares/handlers can access it
req.user.connection = userCon
// Thank you, next (middleware/handler)
next()
});
虽然mongoose.connect()
设置默认连接,mongoose.createConnection()
但只返回一个连接。
这是我会尝试的,这是 Mongoose 推荐的处理多个连接的方法。您应该注意,您不能跨不同的连接共享模型,但您可以共享模式。
如果您只想初始化连接并稍后连接,Mongoose 文档还提供了一个示例。
// initialize now, connect later
db = mongoose.createConnection();
db.openUri('localhost', 'database', port, [opts]);
推荐阅读
- css - 关于svg元素的定位和对齐
- reactjs - 如何在反应中从 index.js 将反应钩子对象传递给 axios 拦截器
- python - 如何创建n个矩阵
- swift - swift ui中tabitem的自定义字体
- rust - 锈活塞矩形功能在循环内不起作用
- flutter - 对齐文本小部件以垂直从同一位置开始
- ruby - 在 jsonb 字段中加入搜索查询
- android - 如何为 Raspi 3 调整 Lineage 16 的启动参数以在 Jetson nano 上使用 qemu / kvm 启动它
- r - 在 Azure ML 中为注册的 R 模型部署 Web 服务
- javascript - 如何使表格的标题与内容对齐?