gpt4 book ai didi

node.js - 在 node.js 应用程序之间共享 MongoDb 连接

转载 作者:可可西里 更新时间:2023-11-01 10:37:48 27 4
gpt4 key购买 nike

我的目标是使用 mongodb 4.0 版和 node.js 驱动程序 3.1.10 使用 node.js 设置一个基于 express 的 api。
在当前阶段,我的 api 部分基本上已经完成,但最终我的同事将把他们的进展合并到它上面。所以我的问题是:
如何共享我的 mongodb 连接实例以跨多种方法访问它?

我目前的结构是这种类型的:

  • 调用 route.js 进行路由管理的 app.js 服务器
  • 调用 userController.js 管理用户相关方法的 route.js
  • 管理资源/用户 CRUD 操作的 userController.js

在网络上搜索结果建议保持连接打开,以便 nodejs 驱动程序将为所有查询管理它,所以我必须公开连接的哪一部分:

  • MongoClient.connect(url) 回调的结果?
  • MongoClient.connect(url) 值本身?

我必须在何时何地打开和关闭连接?

我知道存在一些类似的问题,但它们已经过时了,并且引用了也过时的 mongodb api 和 javscript 实现,所以使用回调或等待如何实现这一点?

最佳答案

您现在不必创建模块。 Express 具有在路由之间共享数据的内置功能。有一个名为 app.locals 的对象。我们可以将属性附加到它并从我们的路由内部访问它。您只需在 app.js 文件中实例化您的 mongo 连接。

var app = express();

MongoClient.connect('mongodb://localhost:27017/')
.then(client =>{
const db = client.db('your-db');
const collection = db.collection('your-collection');
app.locals.collection = collection;
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));

现在可以在您的路由中访问此数据库连接,无需创建和要求额外的模块。

app.get('/', (req, res) => {
const collection = req.app.locals.collection;
collection.find({}).toArray()
.then(response => res.status(200).json(response))
.catch(error => console.error(error));
});

此方法可确保您在应用运行期间打开数据库连接,除非您随时选择关闭它。它可以通过 req.app.locals.your-collection 轻松访问,并且不需要额外的模块。

关于node.js - 在 node.js 应用程序之间共享 MongoDb 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53688030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com