初めての Express アプリを作成しています。コントローラーとモデルがすべて同じ場所 (app.js ファイル) にあるため、少し面倒です。それらを分離する方法はありますか?人為的であっても、さまざまなファイルを作成し、サードパーティのプログラムを使用してそれらを app.js ファイルにコンパイルします。
5 に答える
まず、コントローラーとモデル フォルダーを作成する必要があります。
モデル、ルート、スキーマ、構成、コントローラー、オブジェクトマップなどを自動ロードするために使用できる、express-load と呼ばれるモジュールを使用できます。
あなたのメインファイルでは、私のものはapp.jsと呼ばれ、サーバーコード行を開始する直前にそれらをロードします..次のようになります
//requires....
var load = require('express-load');
//your code
load('models')
.then('controllers')
.then('routes')
.into(app);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express listening on port "+ app.get('port'));
});
module.exports = app;
次に、コードを整理するためのフォルダーを作成できるビュー フォルダー、次にサブフォルダー、homeというフォルダーを作成し、その中にインデックスビューを作成します。
コントローラー フォルダーに、home.js という名前の js ファイルを作成しました。このファイルは、インデックス ビューを探します。
module.exports = function(app){
var HomeController = {
index: function(req, res){
res.render('home/index');
}
};
return HomeController;
}
最後に、ルート フォルダーで、アプリケーション ルートを設定できます。各ビューをコントローラーで指定する必要があります。ルート用の私のファイルは、home.js と呼ばれます
module.exports = function(app){
var home = app.controllers.home;
app.get('/', home.index);
}
それらを分離する方法はありますか?
はい、それらを分離する必要があります。
ほとんどの人が行うことは、メインの app.js ファイルでルートを宣言し、コントローラー用の個別のファイルを含めることです (Rituparna が説明したように)。
これらのコントローラー ファイルには、require を介してモデル ファイルが含まれる可能性が非常に高くなります。例えば。
app.js 内
var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);
routes\blogRoutes.js 内
var model = require('../models/blogModel');
var all = function(req, res) {
// your controller logic
// and very likely calls to your model
var m = model.blog(whatever);
res.send(m.something());
};
module.exports = {
all: all
}
models\blogModel.js 内
var something = function() {
return "something";
};
module.exports = {
something: something
}
これの作業バージョンは、このリポジトリhttps://github.com/hectorcorrea/hectorcorrea.comで確認できます。
私が一般的に行うことは、すべてのルート定義を含むモジュールを作成し、それをロードすることですapp.js
。
require('./routes')(app);
私./routes.js
は一般的にこのように見えます
module.exports = function (app) {
log.info('Loading express routes...');
/* registration */
app.post('/users', require('./routes/register-users')); // register user
app.post('/agents', require('./routes/register-agents')); // register agents
};
ディレクトリ呼び出し内にすべてのルート (.js) ファイルを保持しますroutes
それがあなたが探しているものであることを願っています。
Express Github リポジトリから例をチェックアウトする必要があります。これを行うには複数の方法があります (個人的な好みに基づいて)。
https://github.com/visionmedia/express/tree/master/examples/mvc https://github.com/visionmedia/express/blob/master/examples/resource/app.js https://github.com/ビジョンメディア/エクスプレス/ツリー/マスター/例/ルート分離
ここにあなたを助けるかもしれないいくつかの例があります..
ルートの分離: https://github.com/visionmedia/express/tree/master/examples/route-separation
MVP: https://github.com/visionmedia/express/tree/master/examples/mvc