ExpressJSでのルーティングの肥大化と解消法(Node.js)
Expressを色々試しているのですが、ルーティングで少し困った事があったので一応の解決策と共に書いておきます。
ここで使っているnode/expressのバージョンについて。
$ node -v v0.8.0 $ express --version 3.0.0beta4
Expressでは標準ではルーティングをapp.jsおよびroutes/index.jsで管理している。
routes/index.jsはルーティングされた処理の中身を書き、app.jsがルーティングの振り分けを行っている。
該当部分を抜き出すと以下の部分になる。
app.js
var express = require('express') , routes = require('./routes') , http = require('http'); .... app.get('/', routes.index);
routes/index.js
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
このままルーティングと処理を追加していくとすると、以下の様にapp.jsおよびindex.jsが肥大化していく事が予想される。
app.js
app.get('/', routes.index); app.get('/foo', routes.foo);
routes/index.js
exports.index = function(req, res){ res.render('index', { title: 'Express' }); }; exports.foo = function(req, res){ res.render('foo', { title: 'Express' }); };
app.jsはルーティングだけなので良いとして、routes/index.jsは実際の処理を書いていくので、1-2行では済まない。それが1ファイルにまとまってしまうと、1ファイルで10000行なんて事になりかねない。ファイルを分割したい。
んじゃ、どうしたら良いのか調べてみたところ、以下のサイトが見つかった。
expressのルーティング - hokaccha memo
app.js
var express = require('express') , routesIndex = require('./routes/index') , routesFoo = require('./routes/foo') , http = require('http'); .... app.get('/', routesIndex.index); app.get('/foo', routesFoo.foo);
routes/index.js
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
routes/foo.js
exports.foo = function(req, res){ res.render('foo', { title: 'Express / Foo' }); };
一応分割はできたが、require()が増えていくのが気に食わない。