8

私はまだNodeに頭を悩ませていますが、非常に簡単な質問があります。人々がルートとすべてのロジックを単一のapp.jsファイルで宣言している(またはサブファイルに分割している)ノードの例がたくさんあります。

私の質問は基本的に、すべてのルート宣言をアプリに保持するか、ファイル構造にマップする一般的なルートをブートストラップする方がよいかということです。これは原始的な質問のように思えるかもしれませんが、私の目標は、ノード内で最も効率的なものを把握することです。

現在、Restifyを使用してAPIハンドラーを構築していますが、Expressを使用する別のアプリがあります(したがって、この質問は両方の質問に答える可能性があります)。

私のルートでは、次のように単一ルートのブートストラップを宣言できます。

app.all('/api/:package/:controller', function(request, response) {
    var controller = require(
        '../' + request.params.package + '/api/' + request.params.controller
    );
    controller.index(request, response);
    response.end();
});

これは基本的にAPIからのすべての呼び出しを受け入れ、適切なAPIコントローラーを対象としています。または、各ルートを個別に宣言することも、各コントローラーを通過してinitで宣言するループを作成することもできます。それで:

for (var i in packages.controllers) {
    app.all('api/' + package + '/' + controllers[i].name, function(request, response) {
       var controller = require(
           '../' + request.params.package + '/api/' + request.params.controller
       );
       controller.index(request, response);
    }
}

packages.controllersは、可能なすべてのコントローラーの配列です。上記のコードは正確ではないことに注意してください。私はHMVCフォルダー構造を持っているため、コードは上記よりも少し複雑です。しかし、あなたは要点を理解します。

どちらの結果がどうなるのか、そしてそれが本当に重要なのかどうか疑問に思っています。

ありがとう!

4

3 に答える 3

6

単一のapp.jsはまったくお勧めしません。維持するのは悪夢である5,000以上の行ファイルになってしまいます。

スニペットで私が目にする最大の問題は、require()がキャッシュされても、同期IO要求を実行する必要があることです。入るのは悪い習慣です。

Donが推奨するのと同様に、アプリのインスタンスを受け入れる単一の関数をエクスポートするモジュールにルートを分割するのが最善の方法でした。これは、アプリインスタンスを「装飾する」と考えることができます。

// app.js
var app = express.createServer();
app.configure(function(){ //... });

require('./foo')(app);

// foo.js
exports = module.exports = function(app){

    app.get('/whatever', function(req, res){});

};
于 2012-05-20T19:20:34.807 に答える
3

爆発的なapp.jsファイルは、標準のExpressアプリ構造を体系化するための小さな参照アプリを作成するように私たちのカップルに促しました。それはロケット科学ではなく、物事をより組織化する一連の慣習です。

ここで見つけることができます:https ://github.com/EAAppFoundry/tableau

何かが間違っていたり、足りない場合は、提案/プルリクエストをお待ちしています。

于 2012-05-20T18:22:55.073 に答える
0

ディレクトリツリーをループしてルートを生成することに実際の問題はないと思います。ただし、ルートベースのミドルウェアやその他のルーティング機能(ルート内の変数など)を適切に定義することは困難です。

ルートを宣言的に定義するために使用するライブラリを作成しました。これは、Railsのリソースの豊富なルーティングに触発され、非常に柔軟です。ルートとサブルートのハッシュを作成するというアイデアです。ルート、ミドルウェア、変数のグループを定義する機能もあります。

https://github.com/cheesun/express-declarative-routing

ディレクトリ構造に基づいてルートが自動的に生成されるわけではありませんが、これはすばらしい機能だと思います。ライブラリに追加してください。

于 2014-03-08T04:47:35.537 に答える