我知道使用Node.js可以传输数据。
但为什么这段代码不起作用:
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write("hello");
res.write("world");
}).listen(80);
似乎我必须在最后一个res.write()之后有res.end()才能将数据发送到浏览器。
答案 0 :(得分:2)
我认为块在发送之前必须是一定的大小。
答案 1 :(得分:1)
实际上,在浏览器渲染之前,输出似乎更像是一定的大小。可能是浏览器端的缓冲区。当您发送res.end()
时,浏览器会刷新此缓冲区并立即呈现缓冲区中的所有内容。但是,如果没有发送res.end()
,浏览器将等待,直到其缓冲区被填满。
我尝试使用Firefox和curl尝试以下代码块。
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write("hello\n");
for (var i = 0; i < 100; i++) {
setTimeout(function() {
res.write("world lotsa text here lotsa text\n");
}, 400*i);
}
}).listen(3000);
您可以在使用上述代码运行节点后前往http://localhost:3000/来自行尝试。
然后我用curl尝试了同样的事情,并且从服务器发送的每一行都是直接显示的。
我使用的curl命令只是:
curl http://localhost:3000/
注意我在res.write中插入的换行符作为curl将在输出到stdout之前等待换行符。