6

すべてのアクションでセッションを渡さなくても、すべてのビュー (*.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);
4

1 に答える 1

3

これは機能するはずですがapp.use、これがセッションミドルウェアを初期化した後であることを確認してください。セッションミドルウェアの初期化の前にこれがある場合、チェーン内でそれより前に実行されるため、データは利用できません。

于 2013-09-12T13:46:45.747 に答える