私は Node.js を学んでおり、コア機能を学習するための The Node Beginner Book などのチュートリアルをいくつか読みました。しかし、いくつかの例を読めば読むほど、疑問が募り始めます。
チュートリアルから取得したさらなる例では、 key の CRUD 'read' リクエストに対して/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()function には req,res,next の 3 つのパラメーターがありますが、少なくともapp.get()「req」パラメーターからloadUser(). それはどこから来るのですか? - 関数内
loadUser()で を実行next()すると、関数はその手順を続行できることを意味しapp.get()ますが、この req.currentUser = user は、app.get()関数で使用されるのと同じ req ですか? - 関数内でコード
loadUser()を実行すると、関数res.redirect()のプロシージャが自動的に中断されapp.get()ますよね?には戻らないようDocument.find()です。