NodeとExpressを学ぶのは初めてですが、コードフローをExpressで包み込もうとしています。session.jsに次のようなコードがあるとします。 :
app.post('/session', notLoggedIn, function(req, res) {
User.findOne({
username: req.body.username,
password: req.body.password
}, function (err, user) {
if (err) {
return next(err);
}
if (user) {
req.session.user = user;
res.redirect('/users');
} else {
res.redirect('/session/new');
}
});
});
ユーザーが必須のmongoスキーマであると想定します。私が奇妙だと思うのは、session.userの割り当てです。
req.session.user = user;
リダイレクト後にreq変数はスコープ外になりますが、ユーザーデータを永続化するためにこれを行っていることは明らかなので、次のシナリオのどれが何が起こっているのかを理解する必要があります。 (A)reqパラメーターに割り当てられている引数(コールバックが呼び出されたとき)が保存されている/スタックのどこかにある、(B)セッションが保存されている/スタックにあり、新しいreqオブジェクトに割り当てられているコールバックに渡されるか、(C)Bと同じですが、ユーザーフィールドに渡されます(私の側ではありそうもないし、おそらく考案されたようです)。
すべてのセッション情報を格納する全体的なセッションデータ構造があります(グローバルのようですが、データベース内にある場合もあります-少なくとも接続間で永続的なものです)。各クライアントのセッションデータは、1つの一意のキーを使用してセッションストアにインデックスを付け、そのクライアントのセッションデータを取得します。
特定のブラウザクライアントのセッションを確立することの一部は、グローバルセッションオブジェクトへのインデックスとなる一意のクライアントキー(通常はCookieに保存されます)を作成することです。
着信httpリクエストで、セッションをサポートするExpressミドルウェアは特定のクライアントCookieをチェックし、その特定のCookieがhttpリクエストで見つかり、グローバルセッションオブジェクト/データベースで見つかった場合、そのセッションに保存されている情報をリクエストオブジェクトに追加しますhttpリクエストハンドラが後で使用するため。
それで、ここに典型的なシーケンスがあります: