Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当没有响应返回时,nodejs或expressjs正在重复对route的调用_Javascript_Node.js_Express - Fatal编程技术网

Javascript 当没有响应返回时,nodejs或expressjs正在重复对route的调用

Javascript 当没有响应返回时,nodejs或expressjs正在重复对route的调用,javascript,node.js,express,Javascript,Node.js,Express,我正在使用expressjs。我的问题是,如果出于某种原因,我没有提供响应,则会再次调用路由。在firebug中,请求的状态将为“待定”。最后,在第二次调用路由后,我得到一个响应ERR\u EMPTY\u response 下面是一个简单的测试: // main.html <html> <body> <span>test</span> </body> </html> <script> $.get(

我正在使用expressjs。我的问题是,如果出于某种原因,我没有提供响应,则会再次调用路由。在firebug中,请求的状态将为“待定”。最后,在第二次调用路由后,我得到一个响应
ERR\u EMPTY\u 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');
});
//main.html
测试
$.get(/test”);
//app.js
var express=需要(“express”);
var-app=express();
app.use(express.static(uu dirname+/public));
app.get('/test',函数(req,res){
log(“我被叫”);
});
http.listen(3000,函数(){
log('Express start');
});
当你到达路线时,你会看到
我被呼叫
,然后大约15-20秒后再次呼叫

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

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

//main.html
// 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');
});
测试 $.get(“/test”); //app.js var express=需要(“express”); var-app=express(); app.use(express.static(uu dirname+/public)); app.get('/test',函数(req,res){ res.send(“我被叫”);//必须使用res.send()方法 }); http.listen(3000,函数(){ log('Express start'); });
这可能不是大多数人的解决方案,但我正在使用create react应用程序构建一个网站,我在两个选项卡中打开了该应用程序。出于某种原因,这会在express端导致重复请求,即使我只与一个选项卡交互


奇怪,但关闭第二个选项卡解决了问题。

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