ストアとしてredisを使用するセッションを使用するようにExpress/Connectアプリを設定しました。
app.use(express.session({
secret: "secret key here",
store: app.redisStore,
cookie: { maxAge: 600000 }
}));
次のようにして、独自のフラッシュメッセージシステムを作成しました。
module.exports = function (app) {
'use strict';
//set-up session messages
app.use(function (req, res, next) {
/* set up flash*/
if (req.session.flash === "undefined") {
req.session.flash = [];
}
res.locals.messages = function () {
var messages = req.session.flash;
//clear out messages
req.session.flash = [];
return messages;
};
...
次に、基本的に、必要なときにフラッシュメッセージオブジェクトをフラッシュ配列にプッシュします。メッセージ機能が使用されるたびに、それらはクリアされます。これはほとんどの部分で機能するようです。ただし、ログアウトしている間、再生成機能を使用すると、フラッシュが未定義になります。
function logout(req, res) {
var currentUser = req.session.currentUser;
req.session.regenerate(function (err) {
req.session.flash.push({"type": "info", "message": "You have been logged out."});
console.log(currentUser + " Logged Out");
res.redirect("/login");
return;
});
}
これは理にかなっているようです。再生成はセッションを消去します。これは、最初の要求フラッシュが未定義になった後に発生するためです。このような将来の問題を回避するために、オーバーライドまたはフックできるセッションの初期化関数のようなものがあるかどうか疑問に思っていますか?これを使用して、セッションが開始または再生成されるたびにいくつかのデフォルトのセッション値を設定します。
副次的な質問:フラッシュは実際にredisに保存されていますか?