有没有办法在发送之前检查Node.js https请求的正文?

时间:2015-05-16 22:42:37

标签: javascript node.js request protocol-buffers

我正在尝试调试一些API调用,我想确认我发送了我认为我发送的内容。

var req = https.request(request, function(res) {
  var body;
  res.setEncoding('utf8');
  body = "";
  res.on('data', function(chunk) {
    return body += chunk;
  });
  res.on('end', function() {
    if (res.statusCode === 200) {
      return settings.success(null, JSON.parse(body), res);
    } else {
      return settings.error(body, null, res);
    }
  });
  return res.on('error', function() {
    return settings.error(null, Array.prototype.slice.apply(arguments), res);
  });
});
if (settings.data != null) {
  req.write(settings.data);
}
// check body of req here

settings.data是一个protobuf缓冲区。我想查看最终的书面正文,因为通话中的某个地方有一个错误,我想看看我发送的是什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

编辑:我误解了原来的问题。要检查您发送的内容,您可以使用util.inspect(settings.data)返回显示该变量使用console.dir(settings.data)的内容的字符串以显示该字符串隐式地用于stdout(console.dir()在幕后使用util.inspect()

原始回答:

我认为协议缓冲区是 binary ,但是您要将所有数据转换为utf8字符串。您可以尝试将其全部保留为二进制文件:

var body = [], nb = 0;
res.on('data', function(chunk) {
  body.push(chunk);
  nb += chunk.length;
});
res.on('end', function() {
  body = Buffer.concat(body, nb);
  // now `body` contains all protocol buffer data in the original binary format
});

如果您想要获得缓冲区中内容的文本表示,可以使用util.inspect()。例如:

var inspect = require('util').inspect;

// ...

res.on('end', function() {
  body = Buffer.concat(body, nb);
  if (res.statusCode === 200)
    settings.success(null, inspect(body), res);
  else
    settings.error(body, null, res);
});