Node.js 节点JS,延迟响应

Node.js 节点JS,延迟响应,node.js,Node.js,启动上述服务器后,我运行 var http = require('http'); var s = http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello\n'); setInterval(function() { res.end(' World\n'); },2000)

启动上述服务器后,我运行

var http = require('http');
var s = http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.write('Hello\n');
      setInterval(function() {
          res.end(' World\n');
      },2000);
      console.log("Hello");
});
s.listen(8080);
我得到了规定的延迟。输出:

curl http://127.0.0.1:8080 
你好,世界
但在浏览器中,整个内容在2秒钟后加载

Hello <2 seconds> World
地狱世界

我做错了什么?

下面的一段代码打开了客户端的响应流,并将其传输到客户端。因此,在curl中,您将首先得到“Hello”和2秒后的“World”(因为您已经设置了2000毫秒的间隔)

但是浏览器只有在接收到完整的响应流后才会呈现它。 这就是为什么你会在2秒后得到响应

Hello <2 seconds> World
这完全是浏览器的行为。在收到整个响应之前,它不会使用响应流。一旦流关闭,整个响应就可以使用了。然而,在PHP中,如果需要,有一种方法可以刷新响应流

但是,如果您经常寻找流式数据,这并不是最好的方法。我建议你使用或


我希望这就是您想要的。

浏览器行为不同于
curl
。在您调用
res.end()
之前,浏览器不会呈现页面。因此,如果您想在延迟后加载web页面的一部分,则需要通过或ajax请求分别加载第二部分。我建议使用websocets。看一看,这是一种在node.js中使用WebSocket的简单方法。

提示:-“res.end()”将生成一个完整的结果,并提供给浏览器。所以,只要调用end方法,就会向浏览器发出响应。我知道这不是答案,但它可能会有所帮助。但有没有任何方法可以在浏览器中使用node伪造此功能?
      res.write('Hello\n');
      setInterval(function() {
          res.end(' World\n');
      },2000);
// simulate delay response
app.use((req, res, next) => {
    setTimeout(() => next(), 2000);
});