すべてのアクションでセッションを渡さなくても、すべてのビュー (*.ejs) でセッションを利用できるようにしたいです。私のコードを以下に示しますが、 req.session オブジェクトはここでは常に null ですが、「コントローラー」では、ユーザーが認証された後に次のように指定してセッションオブジェクトにアクセスできます。
req.session.whatever
私の初期化コード(現在、すべてのリクエストで実行されています(デバッグブレークポイントでダブルチェックしました))は次のとおりです。
var appendLocalsToUseInViews = function(req, res, next)
{
//append request and session to use directly in views and avoid passing around needless stuff
res.locals.request = req;
if(req.session != null && req.session.user != null)
{
res.locals.user = req.session.user;
}
next(null, req, res);
};
この関数をアプリ セットアップのプリアンブルに登録します。
app.use(appendLocalsToUseInViews);
app.use メソッドと dynamicHelpers を使用している人を見てきました。Express 3 を使用していますが、Express 2 から廃止されたようです...しかし、関数はすべてのリクエストで正しく呼び出されているため、それはポイントではないようです。この種のプリコントローラー コードで Express セッションにアクセスするにはどうすればよいですか?
ありがとう!
ソリューション ありがとう Jani Hartikainen:
セッションミドルウェアがロードされて動作した後にコードを移動しました!!! これが新しいコードです。
app.use(express.cookieParser(appSecret));
app.use(express.session({ secret: appSecret }));
---->>>app.use(appendLocalsToUseInViews);