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

时间:2017-04-12 09:29:40

标签: node.js ajax express

我使用快递和请求POST看起来像那样

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

POST通过ajax发送,然后使用新数据更新textarea。

 $.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中收到一个数据,然后在另一个数据中收到一个数据,直到最后。

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

我添加时间(1秒......)只是为了表明回调有很多事要做,以发送另一个回复。

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

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

1 个答案:

答案 0 :(得分:2)

你不能

<强>原因:

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

解决方案1:

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

解决方案2(推荐):

使用套接字,并通过它传递数据。 socket.ionodejs个应用程序的套接字库。这是非常容易使用。建立连接,不断从服务器发送数据并在客户端接收数据。