私は 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()
です。