0

正しい方法を考えて、現時点で成長している Express と Connect を使用する node.js Web プロジェクトでミドルウェアをどのように使用するか。

もちろん、現在、リクエストをグローバルに渡したり拡張したりする必要があるミドルウェアがありますが、多くの場合、受信データの準備などの特別なジョブがあり、この場合、ミドルウェアは一連の http メソッドとルートに対してのみ機能します。

私はコンポーネントベースのアーキテクチャを持っており、各コンポーネントは、このコンポーネントが処理できる要求のためにそれらを実装できる独自のミドルウェア層をもたらします。アプリの起動時に、必要なコンポーネントが読み込まれて準備されます。ミドルウェア コードの実行を URL にバインドして CPU の負荷を低く抑えるのは良い考えですか、それともグローバルな目的でのみミドルウェアを使用する方が良いですか?

これは、URL 関連のミドルウェアがどのように見えるかのダミーです。

app.use(function(req, res, next) {            

        // Check if requested route is a part of the current component
        // or if the middleware should be passed on any request
        if (APP.controller.groups.Component.isExpectedRoute(req) ||
            APP.controller.groups.Component.getConfig().MIDDLEWARE_PASS_ALL === true) {
                // Execute the midleware code here
                console.log('This is a route which should be afected by middleware');
                ...
                next();                    
            }else{
                next();
            }
        });
4

2 に答える 2

1

設定にもよりますが、創造力を働かせることができます。

プレフィックスGET付きのリクエストに対して特定のミドルウェアを実行したいとします。/fooその場合、次のようなものを使用して、そのミドルウェアへの呼び出しの数を制限できます。

// matches '/foo', '/foo/bar', '/foo/bar/blah', ...
app.get('/foo*', YourMiddleware);

(ミドルウェアなどを介してすべてのリクエスト メソッドを渡すにapp.getは、に置き換えます)app.all

限られた数 (1 つまたは 2 つ) の特定のルートのみでミドルウェアを実行する場合は、ルート宣言に挿入できます。

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

特定のミドルウェア セットがある場合は、同様に使用できるそれらの配列を作成できます。

var MiddlewareSet = [ MiddlewareA, MiddlewareB, MiddlewareC ];
...
app.get('/', MiddlewareSet, function(req, res) {
  ...
});
于 2013-10-26T19:15:36.323 に答える