27

違いはありますか

app.use('/some/path', function(req, res, next() {})

app.all('/some/path', function(req, res, next() {})

どちらも /some/path リクエストに対してのみ呼び出されるミドルウェア関数ですよね?

4

1 に答える 1

24

これら 2 つの例の使用には大きな違いがあります。登録されたapp.use関数は、一般的なミドルウェア関数であり、通常は関数内のミドルウェア スタック上の位置に応じて呼び出されapp.configureます。このタイプのミドルウェアは通常、エラー処理関数を除いて の前に配置されます。 app.route

一方、すべての HTTP メソッドをカバーし、内部app.allでのみ呼び出されるルーティング関数 (通常はミドルウェアとは呼ばれません)です。以前のルーター関数のいずれかが一致し 、コールバックを呼び出さなかった場合は実行されないため、関数は通常、ルーティング ブロックの先頭にあります。 app.route/some/pathnextapp.allapp.all

ルーティング機能で使用される 3 番目のタイプのミドルウェアもあります。

app.get('/some/path', middleware1, middleware2, function(req, res, next) {});

これは通常、アクセスを制限したり、/some/pathルートに関連する一般的なタスクを実行したりするために使用されます。

実際のアプリケーションでは、両方の関数を使用できますが、 と使用する場合は動作の違いに注意しapp.use/some/pathください。とは異なりapp.getapp.use無名/some/path関数を呼び出す前にルートから削除します。

詳しくは、 expressのドキュメントを参照してください。

于 2013-06-15T14:58:28.013 に答える