Node.js:从POST请求获取响应正文

Kir*_*ali 7 javascript node.js

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

应该很简单,不知道我应该做什么.(节点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");
Run Code Online (Sandbox Code Playgroud)

Mii*_*kka 9

您需要绑定到响应的data事件侦听器.像这样的东西:

var access_req = https.request(options, function(response){
   response.on('data', function(chunk) {
       console.log("Body chunk: " + chunk);
   });
});
Run Code Online (Sandbox Code Playgroud)

  • 请注意,数据可以有多个块,所以,如果我没有错,你必须听取'end'事件,以确保你拥有整个响应体. (3认同)

Tre*_*ham 7

正如Miikka所说,在Node.js中获取响应主体的唯一方法是绑定一个事件并等待身体的每个块到达.没有response.body财产.的http/ https模块是非常级别低; 对于几乎所有应用程序,使用更高级别的包装器库更有意义.

在您的情况下,迈克尔的请求库非常适合该任务.它等待响应的完整主体到达,然后调用表单的回调(err, response, body).

对于解析请求主体,您可能希望使用ConnectbodyParser中间件(或流行的Express,它进一步扩展Connect).