【问题标题】:Server sending multiple responses after AJAX request - using Socket.IO and ExpressJS服务器在 AJAX 请求后发送多个响应 - 使用 Socket.IO 和 ExpressJS
【发布时间】:2018-07-26 15:15:08
【问题描述】:

我正在尝试构建一个实时程序,用户可以在其中设置谷歌地图上的标记,而其他连接的人可以获得相同的标记。一切似乎都正常,只是几分钟后,服务器端再次提交数据。

澄清一下:客户端在地图上设置一个标记,该标记被发送到服务器,以 JSON 格式运行 Node JS 和 Express JS。服务器将数据返回给所有连接的客户端。几分钟后,服务器再次发送它收到的相同数据,导致示例“客户端代码”的最后一行出现“ERR_EMPTY_RESPONSE”客户端。

客户端代码:

var data = new Array();

data.push({lat: Gmap.markers[0].lat, lng: Gmap.markers[0].lng});

var xhttp = new XMLHttpRequest();
xhttp.open("POST", "/marker", true);
xhttp.setRequestHeader('Content-type', 'application/json; charset=UTF-8');
xhttp.send(JSON.stringify(data));

服务器端:

var app = express():
app.post('/marker', function(req,res){
    io.emit('marker', req.body);
})

有人知道发生了什么吗?

【问题讨论】:

  • 等等,您使用的是 WebSockets 还是 XMLHttpRequests?你是为了这个功能故意混合这些吗?
  • 没错,我使用 WebSocket 的页面上还有一个聊天,但我想我也可以使用 Socket.IO 的功能来更新地图。
  • 您忘记在服务器端调用res.end(),因此请求可能在客户端超时。

标签: node.js express socket.io


【解决方案1】:

您需要发送对 http 请求的响应。否则,浏览器将超时并可能会尝试重试。

var app = express():
app.post('/marker', function(req,res){
    io.emit('marker', req.body);
    res.send("ok");     // <== Send a response to the http request here
})

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 2021-05-24
    • 2015-09-29
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多