在我发送之前,是否有一种方法来检查Node.js https请求的主体

Is there a way to check the body of a Node.js https request before I send it?

本文关键字:检查 方法 一种 Node js 主体 请求 https 是否      更新时间:2023-09-26

我正在尝试调试一些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 buffer。我想检查最终写好的代码体,因为在调用的某个地方有一个bug,我想确切地看到我发送的是什么。有人能帮忙吗?

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

原始答:

我相信协议缓冲区是二进制,但是您将所有数据转换为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);
});