我正在使用快递,请求 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会关闭连接。