スタティックファイルを処理しているシンプルなExpressサーバーがあります。私はindex.html
と呼ばれるファイルを持っている私の公開ディレクトリにURLに末尾の円記号が含まれている場合、エクスプレスおよびスタティックミドルウェアを使用したノードクラッシュ
var express = require('express');
var app = express.createServer();
// Configuration
app.configure(function() {
app.use(express.bodyParser());
app.use(express.staticCache());
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
// 404
app.get('*', function(req, res) {
res.send('not found', 404);
});
app.listen(3000);
:ここでは、サーバです。起動するnode app.js
し、localhost:3000/index.html
を参照すると、期待どおりに静的ファイルが表示されます。 localhost:3000/ind
またはlocalhost:3000/ind\
に移動すると、期待通りに404
ページが表示されます。
しかし、(末尾のバックスラッシュに注意)localhost:3000/index.html\
に移動するには、と私のnode
サーバーをクラッシュ:
stream.js:105
throw er; // Unhandled stream error in pipe.
^
Error: ENOENT, no such file or directory '/home/bill/projects/app/public/index.html\'
なぜnode
サーバがクラッシュしているだけではなく404
ページを提供しますか?私はファイルが存在しないので、静的ミドルウェアはそれをスキップして要求を経路に渡すと考えました。リクエストURLに末尾のバックスラッシュがある場合は404
を返すカスタムミドルウェアを作成して周りに乗りましたが、ここで何か不足しているかどうか確認したいと思います。ありがとう!
これは接続時のバグです。カスタムミドルウェアを作成することはあまり意味がありません。特に攻撃の拒否サービスを非常に簡単に拒否するようになって以来、私はバグを報告します。ありがとう! – Bill
この問題は、現在のConnectコードベースで修正されました。 – Bill