2017-02-09 4 views
0

私はミドルウェアが何であるかを完全に理解しようとしており、私はハード・スポットのビットに来ました。角度のあるHttpモジュールはミドルウェアと見なされますか?

私はexpressJsドキュメントとそのミドルウェア機能の定義を読んでいます。「ミドルウェア機能は、要求オブジェクト(req)、応答オブジェクト(res)、および次のミドルウェア機能にアクセスできる機能です次のミドルウェア機能は、通常、nextという名前の変数で表されます。

私は次の変数がfuncを持つために "next"というタイトルを付ける必要はないことを知っています。

ミドルウェア(モノグラムなど)とミドルウェア関数/メソッド(app.use())には違いがあることも知っています。角度では、httpモジュールもこのパターンに従います。角度や他の一般的なフレームワーク内の他のものと同様です。これらもミドルウェアと見なされますか?誰かが私に明快さを与えることができますか?

+0

いいえ、ミドルウェアはブラウザとhttpサーバの間です – Sebas

答えて

1

ミドルウェアは、すべてのリクエストの前または後に実行されるコードです。これにより、エンドポイントごとにコードを実装しなくても、ロギングや認可などの共有機能を作成できます。

ミドルウェアの順序は、一般にミドルウェアチェーンと呼ばれます。

app.use(middleware) 

これは、すべてのリクエストにミドルウェアを添付する方法です。データベース接続に関しては、アプリケーションのグローバルなものであるため、要求エンドポイントから外す傾向があります。

次に、私たちが次に行う理由は、機能が完了したときにチェーンに伝えることです。これはコールバックパターンです。また、チェーン内のエラー(例外)を拾うことができるようにするため、アプリケーションに共有機能を追加することができます。 JavaScriptは型定義されていないので、2つの関数の違いを登録する唯一の方法は、登録された引数の量です。そのため、エラー処理には4つの引数があります。ここで

あなたはわずか数エンドポイント用に使用したい特定のミドルウェアを持っている場合は、あなたが直接

app.get('/', middleware, function(res, res) { 
    /* Your logic here */ 
}); 

を登録でき

app.use(function(req, res, next) { 
    console.log('request made to server'); 
    next(); 
}); 

app.use(function(error, req, res, next) { 
    console.log('an error occurred in the code'); 
    next(); 
}); 

app.get('/', function(req, res) { 
    /* Your logic here */ 
}); 

を扱うロギングとエラーとエンドポイントの例です。これがミドルウェアの理解に役立つことを願っています。ミドルウェアは処理スタックの一部であり、プロトコル呼び出しではありません。

+0

ありがとうございました!あなたは良い説明をしましたが、これは私の混乱がどこにあるのかと思います。 httpモジュールには、ミドルウェアと同様に、どのような方法でも応答を処理する能力を与える.thenメソッドがあります。処理を続けるために別の関数に渡すことさえできます。では、ミドルウェアの違いは何ですか? – Scott

+0

Httpは非同期呼び出しです。サーバからの応答を得るまでには時間がかかるからです。これがJavaScriptで利用できなかった場合、アプリケーションはデータを待っているときにフリーズします。約束を見てください。それが何であるかを理解するのに役立つかもしれません。 –

関連する問題