今回は、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 件のコメント:
コメントを投稿