次のようにExpressで書かれたルートがあります:
app.get("/route", function(req, res){
if (someBoolean){
someFunction(stuff, function(user){
...
req.session.user = user;
});
}
res.render("route");
}
someBooleanが true の場合、セッションを設定する必要があります。ただし、別のページに移動した後、req.session.user は undefined として返されます。ただし、 someFunction 内でreq.session.userをチェックすると、定義された状態に戻ります。セッションがsomeFunctionの範囲外で未定義になることを発見した解決策は、res.render("route") をsomeFunctionに移動することでした:
app.get("/route", function(req, res){
if (someBoolean){
someFunction(stuff, function(user){
...
req.session.user = user;
res.render("route");
});
}
}
ただし、 someBooleanが false の場合、これによりルートが失敗します。これは Node.js の非同期性が原因であると考えていますが、よくわかりません。これが正確に発生する原因は何ですか?これは適切な解決策ですか?