[解決済み] 大規模なNode.jsプロジェクトを整理する方法
質問
大規模なNode.jsプロジェクトを整理する良い方法は何でしょうか?
例えば、express.jsとsocket.ioの両方を使用するアプリですか?これは、アプリケーションの論理構造とファイルシステムの両方を含むでしょう。
現在、私は、1 つのマスター js ファイルに大量のコードを押し込んで、巨大なグローバル オブジェクトにコードを配置している自分を発見しており、それはいたずらな感じがしています。
どのように解決するのか?
初心者の例
もともと@david-ellisがチェックしたものが好きで、良いものなので深く勉強して理解すべきです。しかし、初心者がわかりやすい例を見るためには、もっと簡略化してほしかったと思います。以下は、私が誰かに見せてもらいたかったものです。
expressを使っていて、app.jsファイルにたくさんのルートがリストアップされている典型的なシナリオを挙げてみましょう。その内容は次のようなものでしょう。
app.js
// ... startup code omitted above
app.get('/', function(req, res) {
res.render('index', { title : 'home' });
});
app.get('/contactus', function(req, res) {
res.render('contactus', { title : 'contact us' });
});
app.get('/anotherpage', function(req, res) {
res.render('anotherpage', { title : 'another page' });
});
// and so on...
50のルートがある場合、このファイルはかなり手に負えなくなることが想像できます。app.jsファイルからこのような雑多な部分を取り除くことができれば、素晴らしいことだと思います。
アプリの中に "controllers" フォルダを作成し、次のような構造にします。
app.js
/controllers
コントローラ内にindex.jsという名前のファイルを作成し、以下のコードを記述します。
/controllers/index.js
module.exports.set = function(app) {
// copy your routes listed in your app.js directly into here
}
ルートリストを "app.js" ファイルからカット&ペーストし、"/controllers/index.js" ファイルに配置します。
app.jsファイルで、ルートを削除し、その代わりに以下を実行します。
app.js
// remove your routes and replace with this code
var controllers = require('./controllers');
controllers.set(app);
さて、もしあなたが "/controllers/index.js" ファイルも分割されたいと思ったなら、Node.js がどのようにコードを整理することができるか、本当にロシア人形のように動作するかを見てもらうために、もう一つの例を追加してみましょう。
/quot;/controllers"内にもう一つファイル "accounts"を追加し、その中に次のように配置します。
/controllers/account.js
module.exports.set = function(app) {
// put more app route listings here
}
さて、あなたの "/controllers/index.js ファイル内に、 "account.js" への参照を置いてください。
/controllers/index.js
var account = require('./account.js');
module.exports.set = function(app) {
// your routes here
// let "account.js" set other routes
account.set(app);
}
想像できるように、物事をどんどん小さなパーツに分割し、フォルダの中にさらにフォルダを置き、好きなら "require" で参照することも可能です。同じコンセプトで"/lib"やライブラリファイルも使えます。"node_modules"はすでにこれをやっています。
このように、node.jsはプログラミングを楽しむことができる多くの理由のうちの1つです。
管理しやすいExpress 4のルーティング例
これに関連する Express 4 ルートについて私が回答した別の投稿を紹介します。
関連
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] エラーメッセージ MongoError: bad auth URI 文字列で認証に失敗しました。
-
[解決済み] ノードマータ予期せぬフィールド
-
[解決済み] [Expressで複数のファイルにルートハンドラをインクルードするには?[重複している]。
-
[解決済み] Express.jsのネストしたルータでRestする