【问题标题】:nodejs or expressjs is repeating calls to route when no response is returned当没有返回响应时,nodejs 或 expressjs 正在重复调用路由
【发布时间】:2015-04-27 19:16:13
【问题描述】:

我正在使用 expressjs。我的问题是,如果由于某种原因我没有提供响应,则会再次调用路由。在 firebug 中,请求的状态将是“待定”。最终,在第二次调用路由后,我得到了回复ERR_EMPTY_RESPONSE

这是一个简单的测试:

// main.html
<html>
<body>
    <span>test</span>
</body>
</html>
<script>
    $.get("/test");
</script>

// app.js
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));


app.get('/test', function(req, res) {
    console.log("I'm called");
});

http.listen(3000, function() {
    console.log('Express started');
});

您会在 GET 到路线时看到 I'm called,然后在大约 15-20 秒后再次看到。

似乎 Express 或 Node 以某种方式导致路由再次运行。为什么会这样?如何预防?

编辑:做了一个简单的测试演示问题。

【问题讨论】:

  • 我曾经忘记在路由中添加res.send,浏览器从未得到响应,但据我所知,我从未经历过这种情况,路由运行的地方两次。这听起来更像是您在应用中做错了什么。
  • 如果aModule.doSomething 抛出,你的catch 处理程序将被执行。如果它返回一个你不关心的承诺(你不应该,但很好),res.send(200) 仍将被执行。
  • 如果你不知道是服务器还是浏览器发出重试,你应该检查http连接。
  • 只需查看 Chrome 调试器的网络选项卡,看看浏览器是否正在重新发送请求。
  • @jfriend00 好的,不是浏览器。它必须是 Node 或 Express 中的东西。

标签: javascript node.js express


【解决方案1】:
// main.html
<html>
<body>
    <span>test</span>
</body>
</html>
<script>
    $.get("/test");
</script>

// app.js
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));


app.get('/test', function(req, res) {
    res.send("I'm called"); // you have to res.send() method 
});

http.listen(3000, function() {
    console.log('Express started');
});

【讨论】:

    【解决方案2】:

    对于大多数人来说,这可能不是解决方案,但我正在开发一个使用 create-react-app 构建的网站,并且我在两个选项卡中打开了该应用程序。出于某种原因,这导致了 express 端的重复请求,即使我只与一个选项卡交互。

    奇怪,但是关闭第二个标签解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2018-04-30
      相关资源
      最近更新 更多