先日、暇つぶしに Express で噂の pjax を使って遊んでみました。pjax 自体は jquery-pjax を使う事で手間をかけずに実現出来ますね。
サーバ側もHTTPリクエストヘッダにX-PJAXがあるかどうか判定し、あった場合はlayout: falseとするだけなのでとても簡単です。
app.js のコードはこんな感じに。
|
1 2 3 4 5 6 7 |
app.get('/', function(req, res) { if (req.header['X-PJAX']) { res.render('index', { layout: false }); } else { res.render('index'); } }); |
しかし毎回if文を書くのも面倒なので、pjaxなリクエストが来た時だけlayout: falseになるようにrenderメソッドをラップした新しいメソッドを作成しました。npmでインストール出来ます。
|
1 |
npm install express-pjax |
使い方:
|
1 2 3 4 5 6 7 8 9 10 11 |
var express = require('express'); var pjax = require('express-pjax'); var app = express.createServer(); app.configure(function() { app.use(pjax()); }); app.get('/', function(req, res) { res.renderPjax('index', { locals: { hello: "Hello World!" } }); }); |
本当はrender自体をカスタマイズしたかったのですが、Expressのソースを見た限りではちょっと難しそうだったので新たにrenderPjaxというメソッドを作りました。そのうちリダイレクトにも対応したいですね。