2016-08-02 16 views
0

私はノードアプリケーションを持っています。それは静的ファイルを提供するように設定されています。 app.use(express.static(path.join(__dirname, '../public'))); そして私は他のルートでいくつかの認証ミドルウェアを使用します。この問題は、サーバー上に存在しないイメージが表示されたときに表示されます。この場合は、Expressのように見えますが、静的でないコンテンツのために持っているすべてのミドルウェアを通してそのリクエストを送信しようとしています。 欠落しているファイルごとにすべてのミドルウェアを再トリガーするのではなく、欠落している静的アセットの404を送信する方法はありますか?nodeJs/Expressは、静的ファイルが見つからない場合に対処します。

答えて

2

express.static()ミドルウェアがデフォルトで動作する方法は、ターゲットディレクトリ内のファイルを探し、見つからなければ次のミドルウェアに渡します。

しかし、falseに設定すると、静的ディレクトリに存在するはずだったファイルがすぐに404になるというfallthroughオプションがあります。

the express.static() docから:

このオプションがtrueの場合、そのような不正なリクエストや存在しないファイルへ 要求として、クライアントのエラーは次の単純 コールに、このミドルウェアの原因となります

フォールスルー()を呼び出してスタック内の次のミドルウェアを呼び出します。 falseの場合、 これらのエラー(404sも)はnext(err)を呼び出します。

このオプションをtrueに設定すると、複数の物理ディレクトリ を同じWebアドレスにマップすることも、存在しないファイルを埋めるルートにマップすることもできます。

使用しますが、少ないオーバーヘッドのため 短絡404エラーを可能 厳密に単一のファイルシステムディレクトリ、なるように設計されたパスに、このミドルウェアを搭載している場合はfalse。このミドルウェアはすべての方法に 返信します。

例:

app.use("/public", express.static("/static", {fallthrough: false})); 
+0

ありがとうございました。チャームのように働いた。また、これは** serve-static **モジュールの新機能です。私は** express 4.2.0 **を使用していましたが、その機能はexpressで提供されている** serve-static **のバージョンでは利用できませんでした。更新する必要があります。 – Max

+0

@マックス - 私はそれが単なる新機能であることに気づいていませんでした。 Express文書では、追加されたバージョンの機能を識別しないことがよくあります。 – jfriend00

関連する問題