javascript - 如果出现 404,为什么网页会永远加载?

标签 javascript node.js http express heroku

我有一个由 Heroku 托管的 Express.js/Node.js 网站。如果找不到文件,服务器应该发送 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!');
});

最佳答案

在中间件中调用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) => { //我什么也没做,转发请求 下一个(); });

    app.use((req, res, next) => { req.send('我结束了请求'); //该中间件结束了请求 }));

关于javascript - 如果出现 404,为什么网页会永远加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44220267/

相关文章:

javascript - jQuery hover fadein/fadeout/slidetoggle

javascript - 松弛机器人 : how to use the slack channel functions

javascript - NodeJS 创建 JWT 无第三方库

javascript - 为什么我的网站认为 $http 请求是跨域的?

c# - 如何在 .NET 中处理 HTTP 连接?

c++ - 从网络下载 HTML 页面的最简单方法?

javascript - 如何使用 postman 测试检查API响应中的一个节点在所有对象下是否具有相同的值?

javascript - 粘性侧边栏 Accordion 无法正确滚动

javascript - Angular ngAnimate,如何混合过渡?

javascript - Mongoose - 将用户 _id 保存到不同的架构会更改 ID