我在节点中运行此脚本:
var http = require('http');
var server = http.createServer(function (request, response) {
response.writeHead(200, { "Content-Type": "text/plain" });
response.write('Hello World\n');
response.end('Goodbye World', 'utf8', function() {console.log(response.body);
});
server.listen(8000);
console.log('running');
当我在Chrome中加载页面(localhost:8000)时,我看到:
Hello World
再见世界
到目前为止一切顺利,但我试图了解响应对象中的数据(' Hello World / nGoodbyeWorld')。这就是为什么我有' console.log(response.body)'作为response.end()中的回调(节点http文档说,当响应完成流式传输时将执行回调)。但是console.log只是提供了未定义的'。当我在console.log中时,整个响应对象就是console.logs响应对象ok,但是我看不到任何数据或正文,即使它有&has; isBody:true'。
所以问题是:
a)有回应吗?我认为必须有一个否则将在浏览器窗口中显示任何内容。 b)如果是这样,我如何访问它以及为什么我的工作方式不起作用?
我能找到的最接近的答案是:Where is body in a nodejs http.get response?,但我尝试添加
response.on('data', function(chunk) {
body += chunk;
});
response.on('end', function() {
console.log(body);
});
,正如那里所建议的那样,并没有奏效。此外,那里的人只是回答您如何访问数据,而不是为什么回复。身体不容易访问。
由于
答案 0 :(得分:2)
没有响应主体,您写入响应流的数据只是在您编写时(大部分)发送到客户端。将所有写入回复的内容保存在记忆中是没有意义的。
请求也是如此。如果你需要,你必须自己缓冲传入的数据,它不是在幕后完成的,它只是流式传输。