LoginSignup
14
12

More than 5 years have passed since last update.

長くなったapp.jsをどうにかしたい

Posted at

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側の実装

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.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で参照できるので、データベースの接続とかはここで渡すといいかもしれない

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12