私は、HerokuでホストされているExpress.js/Node.jsのウェブサイトを持っています。ファイルが見つからない場合、サーバーは404エラーを送信するはずです(ほとんどのWebサイトと同じように)。しかし、私のコードのエラーハンドラは正しく動作しません。クライアントが存在しないファイルを要求すると、ページはロードされ、ロードされ、ロードされます。永遠にロードされます。ファイルが見つからないとサーバーが読み込みを停止するようにするにはどうすればよいですか?404が存在する場合、Webページはいつまで読み込まれますか?
これは私のJavaScriptの最初のセクションです:
var express = require('express'); // Express.js
var app = express();
var http = require('http');
var server = http.createServer(app);
var bodyParser = require('body-parser');
var postgres = require('pg'); // Postgres database
app.use(express.static('static', {
extensions: ['html']
}));
app.all('*', function (request, response, next) {
var redirectURL = request.query.redirect;
if (redirectURL != undefined) {
response.redirect(redirectURL);
}
});
app.get('/', function (request, response, next) {
response.redirect('/main/index');
});
そして次は、(それが前の部分の後に右行く)ミドルウェアを扱う私の誤りです。最初のものは400xのエラーコードを処理し、2番目のものは500xのエラーコードを処理します。
// Handle 404 error
app.use(function(request, response) {
response.status(400);
response.send("Error 404!");
});
// Handle 500 error
app.use(function(error, request, response, next) {
response.status(500);
response.send("Error 500!");
});
server.listen(process.env.PORT || 8080, function() {
console.log('Listening on port 8080!');
});
残念ながら、これは機能しません。エラーハンドラの最後に 'res.end()'を呼び出すことは効果がありません。そして、この回答(https://stackoverflow.com/questions/20355136/must-res-end-be-called-in-express-with-node-js)によると、 'res.send()'を呼び出すことは 'res .end() 'を自動的に実行します。それ以外に何が問題を引き起こしているのでしょうか? –
更新された回答を表示 – patentul