在 express 中间件中使用 monk / mongo 的有效、正确的方法是什么?
Whats an efficient, correct way of using monk / mongo in express middleware?
我有一个正在开发的网络应用程序。我发现 CW Buechler's tutorial 如何使一个简单的非常有用,但有一些琐碎的担忧,我想知道它们是真正的问题,还是我可以忽略的事情。
我将路由连接到数据库的方式直接来自教程。
在 app.js 中,此代码实例化数据库,并将对它的引用附加到流经中间件的每个请求对象。
// 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);
});
所以,对于我琐碎的担忧:
- 通过将数据库附加到请求将数据库传递给路由非常方便,但这会影响性能吗?在我可以使用的路由器文件中引用它会更好吗?执行此操作的代码是什么?
- 在使用后删除集合是一种好习惯吗?本教程没有这样做,但是在退出路由处理程序之前进行
collection.drop()
调用看起来很有用,否则我认为我只会与数据库建立大量打开的连接。
一如既往的感谢!
- 不,它不会影响性能。传递对
db
的引用是一种方便的方法,但对于 Monk 来说,这似乎并不是特别必要。请参阅下面的替代设置。
- 您混淆了
collections
和 connections
。前者是 SQL 中 "tables" 的 MongoDB 等价物,因此删除它们似乎没有意义,因为这基本上会丢弃数据库中的所有数据 table.至于连接:通过各种间接层,Monk 似乎正在使用官方 MongoDB 节点驱动程序,它自己处理连接(通过连接池)。所以没必要自己处理。
另一种传递 Monk 数据库句柄的方法:您可以将它放在一个单独的模块中:
// database.js
module.exports = require('monk')('localhost:27017/StarChamber');
并且在需要句柄的每个模块中,您可以导入它:
var db = require('./database');
我有一个正在开发的网络应用程序。我发现 CW Buechler's tutorial 如何使一个简单的非常有用,但有一些琐碎的担忧,我想知道它们是真正的问题,还是我可以忽略的事情。
我将路由连接到数据库的方式直接来自教程。
在 app.js 中,此代码实例化数据库,并将对它的引用附加到流经中间件的每个请求对象。
// 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);
});
所以,对于我琐碎的担忧:
- 通过将数据库附加到请求将数据库传递给路由非常方便,但这会影响性能吗?在我可以使用的路由器文件中引用它会更好吗?执行此操作的代码是什么?
- 在使用后删除集合是一种好习惯吗?本教程没有这样做,但是在退出路由处理程序之前进行
collection.drop()
调用看起来很有用,否则我认为我只会与数据库建立大量打开的连接。
一如既往的感谢!
- 不,它不会影响性能。传递对
db
的引用是一种方便的方法,但对于 Monk 来说,这似乎并不是特别必要。请参阅下面的替代设置。 - 您混淆了
collections
和connections
。前者是 SQL 中 "tables" 的 MongoDB 等价物,因此删除它们似乎没有意义,因为这基本上会丢弃数据库中的所有数据 table.至于连接:通过各种间接层,Monk 似乎正在使用官方 MongoDB 节点驱动程序,它自己处理连接(通过连接池)。所以没必要自己处理。
另一种传递 Monk 数据库句柄的方法:您可以将它放在一个单独的模块中:
// database.js
module.exports = require('monk')('localhost:27017/StarChamber');
并且在需要句柄的每个模块中,您可以导入它:
var db = require('./database');