Expressのミドルウェアを使う
Node.jsを使っていて、Express (Connect)のミドルウェアを書いたりしたので、簡単にメモ。Expressのミドルウェアは、request / response / nextの3つの引数をとる関数を用意してやればよいです。3つ目のnextは関数で、実行すると次のミドルウェアが実行される仕組みになっています。なので、nextをせずにミドルウェアの実行を途中で止めることもできます。
今回は例として、reqに格納されるHTTPリクエストのCookieに user_id=summerwind といったような文字列が含まれていた場合、ユーザーID文字列、summerwind を抽出して、req.user_id に保存するミドルウェアモジュールを書いてみます。
function userid() {
var pattern = new RegExp('user_id=([a-z\-])', 'i');
return function(req, res, next) {
if('cookie' in req.headers) {
req.headers.cookie.match(pattern);
req.user_id = RegExp.$1;
}
next();
};
}
exports.userid = userid;
上記のモジュールを middleware.js として保存した場合、Expressでは以下のように使うことができます。
var express = require('express');
var middleware = require('./middleware');
var server = express.createServer();
server.configure(function() {
// ミドルウェアを適用
server.use(middleware.userid());
});
server.get('/', function(req, res) {
res.send('User ID: '+req.user_id);
});
server.listen(8080);
セッションやログ管理など、アプリケーション全般で利用する共通処理なんかは、まとめてミドルウェアに落としてしまったほうが楽ですね。