1
我有一個用Heroku託管的Express.js/Node.js網站。如果找不到文件,服務器應該發送404錯誤(與大多數網站一樣)。但是我的代碼中的錯誤處理程序無法正常工作。當客戶端請求一個不存在的文件時,該頁面將加載...並加載...並永久加載...。當它檢測到無法找到文件時,如何使服務器停止加載?爲什麼網頁如果有404會永久加載?
這是我的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錯誤代碼,第二個處理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