Connectのリクエストハンドラ的なもの??? その2
前回の続きというか改良版?というか。
app.js
var http = require('http'), server = http.createServer(); function RequestHandler() { this._fn = []; } RequestHandler.prototype.use = function () { var that = this; Array.prototype.slice.call(arguments).forEach(function (fn) { (typeof fn === 'function') && that._fn.push(fn); }); }; RequestHandler.prototype.callHandlers = function (req, res) { this._fn.some(function (fn) { return (fn(req, res, function () { return false; }) === void 0); }); }; var rh = new RequestHandler(); //rh.use(require('./aaa')); //rh.use(require('./bbb')); //rh.use(require('./ccc')); rh.use( require('./aaa'), require('./bbb'), require('./ccc') ); server.on('request', function (req, res) { rh.callHandlers(req, res); }); server.listen(3000);
aaa.js
module.exports = function (req, res, next) { console.log('aaa'); return next(); };
bbb.js
module.exports = function (req, res, next) { console.log('bbb'); return next(); };
ccc.js
module.exports = function (req, res, next) { console.log('ccc'); res.writeHead(200, { 'content-type': 'text/plain; charset=utf-8' }); res.end('ccc.js'); return next(); };
端末
$ node app.js aaa bbb ccc
とかこんな感じ?
ちょっとしたものくらいならこれでも……とか思ってるとどんどん機能追加とかする羽目になるから、やっぱり最初からExpress使ってた方がいいんだろうなあ。