node.jsのexpressでWebアプリを作っているとどんどんapp.jsが長大になっていくお・・・
というわけで分割する方法色々
機能毎に別アプリとして別ポートで起動させる
利用者側のapp.js、管理画面機能のmanager.jsとか完全に別のアプリとして実装、別ポートで起動、リバースプロキシで別のサブドメインを割り当ててさばく
セッション情報の共有(Cookieのdomain)に一工夫が必要だが、そもそも管理画面のセッション情報を利用者側のアプリで必要にすることなんてほぼないわけで
同じようにリバースプロキシを設定すれば別ポートのアプリ同士をディレクトリに見せかけることもできる
DBの接続情報などは設定ファイルに出せばいいので、これはこれで有効かなという気もする
Router機能を使う
今回のメインディッシュで例はExpress4前提
/などのメインはapp.js、/dir1以下はdir1.js、/dir2以下はdir2.jsでさばく
node app.jsで全部起動する
まず、dir1.js側の実装
var express = require('express');
module.exports = function(receiveFromAppJs){
var router = express.Router();
router.get('/foo', function(req, res){
// ...
});
router.get('/bar', function(req, res){
// ...
});
return router;
};
同じようにdir2.jsも作っておく
そしてメインのapp.js側で
//...
app.use('/dir1', require('./dir1.js')({a:1, b:2}));
app.use('/dir2', require('./dir2.js')({a:1, b:2}));
//...
と書いておけば
- /dir1/fooのアクセスはdir1.jsの/fooに
- /dir1/barのアクセスはdir1.jsの/barに
- /dir2/fooのアクセスはdir2.jsの/fooに
- /dir2/barのアクセスはdir2.jsの/barに
・・・という形にとりはからってくれる
{a:1, b:2}などはサブプログラムに渡したいオブジェクトを指定
サブプログラム側でreceiveFromAppJsで参照できるので、データベースの接続とかはここで渡すといいかもしれない