expressでアプリ作っててハマったので備忘録
経緯
そもそもviewでセッションの値使う書き方していいのかは定かではないが、セッションに保存している値をviewしようとしてjadeで以下のように書くとsessionがundefinedだって怒られる
div req.session.hoge
まぁviewでreqとか扱えなさそうなので当然っちゃ当然なのだがどうにかしたい
対策
結論から言うと、middlewareを追加してviewで参照可能な変数に入れるようにする
コードはこうなる
app.use(function(req, res, next){ res.locals.hoge = req.session.hoge; next(); });
どうやらres.localsにviewからアクセスできる変数が定義されるらしく、そこに新たにパラメータを追加してやり、セッションのhogeを入れることで参照可能になるようだ
こうするとviewのjadeでは以下のようにすると値が取れる
div hoge
補足事項
ネットで情報を探していると以下のような書き方を載せているものがあった
app.dynamicHelpers({ session: function (req, res) { return req.session; } });
最初はこれを使ったんだけどまー動かない
このdynamicHelpersってやつはexpress 3.x系では廃止されたらしい
このことはexpress公式のmigrationガイドにも記載があるので注意
また、middlewareを定義する位置なのだが、「app.use(app.router)」より前に書かないと動かない
中まで追ってないから原因はわからないが、そういうもんらしい
これは言うまでもないが「app.use(express.session(・・・」の後に書かないとsessionが正しく読めないっぽくて怒られるので、動かない場合は書く位置を見なおしてみると良い