今回は、expressバージョン3.x 以降で、flashメッセージを使う方法を紹介します。
express では、バージョン2.x 以前では req.flash というメソッドが提供されていましたが、3.x では廃止されたようです。
https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
代替手段として、 session もしくは、connect-flashモジュールを使う方法が挙げられているので、この2つの方法を使ってflashメッセージ機能を実装してみます。
session を使って実装
まずはsessionにflashメッセージをセットします。
なお、実行にはcookieParser と session ミドルウェアが必須となりますので、注意してください。
app.js
app.get('/entries', function(req, res){
if(!req.user){
req.session.messages = ["ログインしてください"];
res.redirect('/login');
}
//省略
});
session に格納されたメッセージを、view から参照できるようにします。
各 route でメッセージを view に渡しても良いのですが、ここでは、view から直接アクセスできる、 res.locals に flashメッセージを格納するミドルウェアを作成しています。
これで、リクエストの度に res.locals.messages は req.session.messages の値で初期化されます。
req.session.messages をクリアするのをわすれずに!
app.js
app.configure(function(){
//省略
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(function(req, res, next){
res.locals.messages = req.session.messages;
req.session.messages = null;
next();
});
//省略
});
view からは、messages にアクセスすることで、flashメッセージを取得できます。
login.jade
- if(messages)
each message in messages
p= message
connect-flash モジュールを使う
connect-flash(https://github.com/jaredhanson/connect-flash)モジュールを使えば、より簡単にflash機能を実装できます。
設定方法は、connect-flash をミドルウェアとして登録するだけです。
なお、connect-flash の実行には、cookieParser と session ミドルウェア が必須なので、この2つよりも後に connect-flash を呼び出す必要があります。
app.js
var flash = require('connect-flash');
//省略
app.configure(function(){
//省略
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(flash());
//省略
});
以上で、req オブジェクトに flash() が追加されました。
メッセージの設定と取得方法は以下のとおりです。
flashメッセージを設定
app.js
app.get('/entries', function(req, res){
if(!req.user){
req.flash('alert', 'ログインしてください。');
res.redirect('/login');
}
//省略
});
flashメッセージを取得
app.js
app.get('/login', function(req, res){
res.render('login', {message: req.flash('alert')});
});
まとめ
express3.x 以降では、req.flash の変わりにsession を使うか、connect-flash モジュールを使う。
特別な理由がない限り、しっかりテスト済みの connect-flash モジュールを使うべきでしょう。
0 件のコメント:
コメントを投稿