5

初めての Express アプリを作成しています。コントローラーとモデルがすべて同じ場所 (app.js ファイル) にあるため、少し面倒です。それらを分離する方法はありますか?人為的であっても、さまざまなファイルを作成し、サードパーティのプログラムを使用してそれらを app.js ファイルにコンパイルします。

4

5 に答える 5

7

まず、コントローラーとモデル フォルダーを作成する必要があります。

モデル、ルート、スキーマ、構成、コントローラー、オブジェクトマップなどを自動ロードするために使用できる、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);
}
于 2015-01-28T13:45:27.323 に答える
2

それらを分離する方法はありますか?

はい、それらを分離する必要があります。

ほとんどの人が行うことは、メインの 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で確認できます。

于 2013-11-14T13:48:27.067 に答える
2

私が一般的に行うことは、すべてのルート定義を含むモジュールを作成し、それをロードすることです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

それがあなたが探しているものであることを願っています。

于 2013-11-14T12:40:41.983 に答える
2

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/ビジョンメディア/エクスプレス/ツリー/マスター/例/ルート分離

于 2013-11-15T08:30:08.210 に答える
0

ここにあなたを助けるかもしれないいくつかの例があります..

ルートの分離: https://github.com/visionmedia/express/tree/master/examples/route-separation

MVP: https://github.com/visionmedia/express/tree/master/examples/mvc

于 2013-11-14T18:00:54.157 に答える