Node.js:从POST请求中获取响应体

9

我在Node.js中提取POST请求的响应主体时遇到了问题。我期望的响应是:'access_token=...'。

这应该很简单,但我不确定应该做什么。(Node v0.4.3)

以下是我的代码片段。

payload = 'client_id='+client_id + '&client_secret='+ client_secret
                                  + '&code='+ code
   var options = {
      host: 'github.com',
      path: '/login/oauth/access_token?',
      method: 'POST'
   };

   var access_req = https.request(options, function(response){
      response.on('error', function(err){
         console.log("Error: " + err);
      });
      // response.body is undefined
      console.log(response.statusCode);
   });

   access_req.write(payload);
   access_req.end();
   console.log("Sent the payload " + payload + "\n");
   res.send("(Hopefully) Posted access exchange to github");
2个回答

9
你需要绑定到响应的 data 事件监听器。像这样:
var access_req = https.request(options, function(response){
   response.on('data', function(chunk) {
       console.log("Body chunk: " + chunk);
   });
});

3
请注意数据可能会分成几块发送,因此如果我没记错的话,您必须监听“end”事件以确保已获取完整的响应体。 - Guido
1
根据@GuidoGarcía所说,这里提供一个更全面的答案指向,展示了如何获取整个消息体。https://dev59.com/N2445IYBdhLWcg3wAFq0 - WolfgangCodes

7
如Miikka所说,在Node.js中获取响应体的唯一方法是绑定事件并等待每个数据块到达。没有response.body属性。 http/https模块非常低级;对于几乎所有应用程序,使用更高级别的包装库更有意义。
在您的情况下,mikeal的request库非常适合此任务。它会等待完整的响应主体到达,然后调用您的回调函数,形式为(err, response, body)
要解析请求正文,您可能需要使用ConnectbodyParser中间件(或流行的Express,它进一步扩展了Connect)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接