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

cyp*_*ian 1 ajax node.js express

我正在使用express,请求 POST 看起来像这样

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

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');
          }
       });
Run Code Online (Sandbox Code Playgroud)

如何使用一个 POST 和一些响应来发送此信息。当 cb 完成时,用户在文本区域中收到一个数据,然后收到另一数据,依此类推直到结束。

<textarea>
 data 1 - 1sec
 data 2 - 2sec leater
 data 3 - 3 second later
 ...
</textarea>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sha*_*yar 5

你不能


原因:

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

解决方案一:

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

解决方案2(推荐):

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


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