【发布时间】: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