【问题标题】:node.js and setTimeout and google chromenode.js 和 setTimeout 和谷歌浏览器
【发布时间】:2013-06-30 16:51:02
【问题描述】:

我是 node.js 的初学者,我对 setTimeout(function(){.....},time); thingo 有一些问题。当我卷曲本地服务器但在谷歌浏览器中不符合预期时,这工作正常(我尚未测试其他浏览器)

我的代码是:

/* simple node.js createserver */

var http = require('http');

http.createServer(function (request, response) {
     response.writeHead(200);
  response.write('Somthing\r\n');

  setTimeout(function(){
        response.end('\n This came out after 5 seconds :) ');
  }, 5000);
   response.write('Hello World\n');
}).listen(8124);



console.log('Server running at http://127.0.0.1:8124/');

当我 curl 127.0.0.1:8124 时,一切都按预期工作。但是当我在浏览器中指出它时,它会保持空闲一段时间(我猜是 5 秒)并一次显示所有内容?这是 node.js 的预期行为还是我遗漏了什么?浏览器可以像 curl 那样做(即先打印两行,等待 5 秒再打印另一行)吗?

【问题讨论】:

标签: node.js


【解决方案1】:

试试这个

http.createServer(function (request, response)

  response.setHeader('Content-Type', 'text/html; charset=UTF-8');
  response.writeHead(200);
  response.write('Somthing\r\n');

  setTimeout(function(){
    response.end('\n This came out after 5 seconds :) ');
  }, 5000);

  response.write('Hello World\n');
  //No point writing Hello World here as it is written immediately

}).listen(8124);

【讨论】:

  • 谢谢。最后一个 Hello World 只是来自我之前的代码 :)(写这个没有意义)
  • 添加 text/html; charset=UTF-8 作为 Content-Type 使其工作。它告诉浏览器页面是用什么编码的。浏览器可能无法获取 Content-Type,除非它们遍历整个内容。浏览器可以逐步加载页面。只是这样做需要它事先知道一些页面元数据。
【解决方案2】:

这是意料之中的——浏览器在页面加载完成之前不会显示页面(我相信大块可能会有例外,但在大多数情况下这是正确的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2010-12-24
    • 2012-05-01
    • 2017-03-31
    相关资源
    最近更新 更多