为什么网页如果有404就永远加载?

我有一个用Heroku托pipe的Express.js / Node.js网站。 如果找不到文件,服务器应该发送一个404错误(像大多数网站一样)。 但是我的代码中的error handling程序无法正常工作。 当客户端请求一个不存在的文件,页面将加载…并加载…并加载…永远。 当检测到文件无法find时,如何使服务器停止加载?

这是我的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'); }); 

以下是我的error handling中间件(它在前一部分之后)。 第一个处理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!'); }); 

在你的中间件中调用response.end(),像这样

 // Handle 404 error app.use(function(request, response) { response.status(400); response.send("Error 404!"); response.end(); }); 

这是我如何检查我的应用程序中的错误,一个中间件

 app.use((err, req, res, next) => { if (err.statusCode === 403) { res.statusCode = 403; var out = { message: 'missing/invalid authorization: ' + err.message, code: err.code, statusCode: err.statusCode }; res.end(JSON.stringify(out)); return; } next(err); }); 
  • 检查你的中间件实际上是否被调用,console.log应该是足够的
  • 如果一个中间件没有结束请求,它必须将请求转发到下一个中​​间件,所以你需要调用next(),中间件的格式是

    app.use((req,res,next)=> {//我什么也没做,转发请求next();});

    app.use((req,res,next)=> {req.send('I ended the request'); //这个中间件结束了请求}));