我正在尝试使用mongodb数据库构建一个简单的快速应用程序。以下是一些我有点困惑的代码行:
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');
// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
app.use('/', routes);
app.use('/users', users);
所以我使用monk与我在localhost:27017上运行的数据库进行通信。我得到了。
app.use在做什么?我读了这个解释:
当我们将Mongo和Monk添加到app.js时,我们已经定义了“db”。它的 我们的Monk连接对象。通过将此功能添加到app.use,我们就是 将该对象添加到我们的应用程序所做的每个HTTP请求(即:“req”)。 注意:这可能不是最佳性能,但同样,我们也是 在这里快点肮脏。
这是什么意思?我可以提出哪些http请求?
似乎允许我在路线文件中做这样的事情:
router.get('/userlist', function(req, res) {
var db = req.db;
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
});
所以我想当我的路由器向/ userlist发出get请求时...我可以访问请求和响应变量。那个请求变量附加了一个db?请求和响应变量是什么?
-Jeff
答案 0 :(得分:2)
Express使用称为责任链的东西。基本上,进入应用程序的每个 HTTP请求都会通过注册app.use
,app.get
或类似内容的所有处理程序进行处理。它们按照注册顺序执行,只选择与请求URL匹配的处理程序。
app.use(function(req,res,next){
req.db = db;
next();
});
这意味着上面的代码注册了一个处理程序:
req.db
(代表HTTP请求的对象)上存储对数据库的引用next()
,它完全按照它所说的 - 让 next 处理程序处理请求在这种情况下,下一个处理程序将是生成响应的“真正”处理程序之一,并且由于您的数据库处理程序首先执行,req.db
引用将已经可用。