我正在学习 Node.js,并且我已经阅读了一些教程,例如用于学习核心功能的 The Node Beginner Book。但是我读的例子越多,我开始收集的疑问就越多。
在从教程获得的进一步示例中,我们可以看到对于 key 的 CRUD“读取”请求/documents/titles.json
,我们返回一个值:
app.get('/documents/titles.json', loadUser, function(req, res) {
Document.find({ user_id: req.currentUser.id },[], { sort: ['title', 'descending'] },
function(err, documents) {
res.send(documents.map(function(d) {
return { title: d.title, id: d._id };
}));
});
});
在此示例中,该函数loaduser()
用于身份验证目的:
function loadUser(req, res, next) {
if (req.session.user_id) {
User.findById(req.session.user_id, function(err, user) {
if (user) {
req.currentUser = user;
next();
} else {
res.redirect('/sessions/new');
}
});
}
}
我不明白的是:
- 我想 node.js 在开始执行 app.get 之前,它会转到 loaduser 函数。
loadUser()
函数有三个参数:req、res、next,但至少我看不到你是如何从app.get()
“req”参数传递到loadUser()
. 它从哪里来? - 在
loadUser()
函数内部,当你执行时next()
,它意味着函数app.get()
“可以继续它的过程,但是这个req.currentUser = user,和函数上使用的req是一样的app.get()
吗? - 在
loadUser()
函数内部,当你执行res.redirect()
代码时,会自动中断app.get()
函数上的过程,对吧?看起来它不会返回到Document.find()
.