gpt4 book ai didi

node.js - 在 Express 中间件中使用 Monk/mongo 的有效、正确的方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 22:52:33 25 4
gpt4 key购买 nike

我正在开发一个网络应用程序。我发现CW Buechler's tutorial关于如何使一个简单的问题变得非常有用,但有一些琐碎的担忧,我想知道它们是真正的问题,还是我可以忽略的事情。

我将路线连接到数据库的方式直接来自教程。

在 app.js 中,此代码实例化数据库,并将对其的引用附加到流经中间件的每个 req 对象。

// wire up the database
var mongo = require('mongodb');
var db = require('monk')('localhost:27017/StarChamber');

----------8<-------

// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});

在中间件中它的使用方式如下:

app.get('/', function (req, res) {
var db = req.db;
var collection = db.get('myCollection');
// do stuff to produce results
res.json (results);
});

所以,对于我的烦恼:

  1. 通过将数据库附加到请求来将其传递到路由非常方便,但这会影响性能吗?在我可以使用的路由器文件中引用它会更好吗?执行此操作的代码是什么?
  2. 在使用集合后丢弃它是一个好习惯吗?本教程没有这样做,但在退出路由处理程序之前调用 collection.drop() 看起来很有用,否则我想我只会与数据库建立大量开放连接。<

一如既往的感谢!

最佳答案

  1. 不会,它不会影响性能。这是传递对 db 的引用的便捷方法,但对于 Monk 来说似乎并不是特别必要。请参阅下文了解替代设置。
  2. 您将集合连接混淆了。前者相当于 MongoDB 中 SQL 中的“表”,因此删除它们似乎没有意义,因为这基本上会丢弃数据库表中的所有数据。至于连接:通过各个间接层,Monk 似乎正在使用官方 MongoDB Node 驱动程序,该驱动程序本身处理连接(通过连接池)。所以没必要自己处理。

对于传递 Monk 数据库句柄的另一种方法:您可以将其放在单独的模块中:

// database.js
module.exports = require('monk')('localhost:27017/StarChamber');

在每个需要句柄的模块中,您可以导入它:

var db = require('./database');

关于node.js - 在 Express 中间件中使用 Monk/mongo 的有效、正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37274124/

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