如何在一个请求中使用两次或更多回调发送响应



我正在使用快递,请求 POST 看起来像那样

router.post('/', function(req, res, next){
 var data = req.body;
 getRandom(data, function(value){
     res.json({value: value});
 });
});

POST 通过 ajax 发送,然后用新数据更新文本区域。

 $.ajax({
           type: "POST",
           url: "/",
           data: JSON.stringify(datareq),
           dataType: 'json',
           contentType: 'application/json',
           success: function(x){
               $.each(x, function(index, value) {
                  $('.textarea').append(value + 'n');
               });
           },
           error: function(x) {
                console.log(x + 'error');
          }
       });

如何使用一个 POST 和几个响应发送此消息。当cb完成时,用户在文本区域中收到一个数据,然后是另一个数据,直到最后。

<textarea>
 data 1 - 1sec
 data 2 - 2sec leater
 data 3 - 3 second later
 ...
</textarea>

我添加时间(1秒...(只是为了表明回调有很多事情要做才能发送另一个响应。

当然这不起作用,因为res.send((关闭连接并且我收到错误

那么如何实现我的想法,在发布请求后同时发送。我想非常快速地为用户提供数据,然后在准备好时再提供另一个数据,而不是等待所有数据,然后发送响应。

你不能


原因:

Http 在发送响应后关闭连接。您不能保持打开状态并向客户端发送多个响应。HTTP不支持它。

解决方案 1:

只需在客户端放置一个计时器并定期请求即可。

解决方案 2(推荐(:

使用套接字,并通过它传递数据。 socket.io 是用于nodejs应用程序的套接字库。它非常易于使用。建立连接,继续从服务器发送数据并在客户端接收数据。


只是为了补充答案。这个答案解释了为什么res.send会关闭连接。

最新更新