Node.js: connectのlogger

『実践Node.jsプログラミング』(p.185〜)の写経。
connect.loggerは、morganになっております。ちなみに、これらは親切にConnectのReadme.mdにMiddlewareとして紹介されています。

npm install connect
npm install morgan

余計なものがあったりしますが、『実践Node.jsプログラミング』(p.185〜)に対応する例。

var connect = require('connect')
  , morgan = require('morgan')
  , url = require('url')
  , fs = require('fs')
  , _ = require('underscore-node');

var log = fs.createWriteStream('./morgan.log', { flags: 'a' });

morgan.token('query-string', function(req, res) {
  return url.parse(req.url).query;
});

function hello(option) {
  option = option || {};
  if (_.isUndefined(option.name)) {
    option.name = 'Mayuyu';
  }
  return function(req, res, next) {
    res.setHeader('Content-Type', 'text/plain; charset=utf-8');
    res.end('Hello, ' + option.name + '!\n');
  };
}

connect()
.use(morgan(':method :url :query-string :response-time ms', { stream: log }))
.use(hello())
.listen(3000);

ちょっと間違えそうなのが、morgan()渡すオプション。写経本では、オプションとして{ format: ‘〜’ }のような記述をしていますが、formatは第1引数にそのまま渡して、その他のオプションを第2引数として渡します。