node js找不到响应主体http createserver

时间:2016-02-07 00:09:27

标签: javascript node.js http response

我在节点中运行此脚本:

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);
  });

,正如那里所建议的那样,并没有奏效。此外,那里的人只是回答您如何访问数据,而不是为什么回复。身体不容易访问。

由于

1 个答案:

答案 0 :(得分:2)

没有响应主体,您写入响应流的数据只是在您编写时(大部分)发送到客户端。将所有写入回复的内容保存在记忆中是没有意义的。

请求也是如此。如果你需要,你必须自己缓冲传入的数据,它不是在幕后完成的,它只是流式传输。