0

我正在使用这个很棒的模块:protobuf.js用于 node.js 中的协议缓冲区。

我有 int64 字段类型(由 google-protocol 支持),我正在尝试将其打印到屏幕上。

该行:

console.log(MessageTypeAck.decode(message));

打印以下内容:

{ trace: 
   [ { topic: 'Genesis', partition: 0, offset: [Object] },
     { topic: 'DataManager', partition: 0, offset: [Object] } ],
  sourceModuleName: 'DataManager',
  sourceModuleID: 10040 }

(偏移字段打印为[Object])和行:

console.log(MessageTypeAck.decode(message).trace[1].offset.toString());

印刷:

9217

(实际值)。为什么第一次调用也不调用 Long 对象的 toString() ?

为什么所需的输出将是:

{ trace: 
   [ { topic: 'Genesis', partition: 0, offset: 9217 },
     { topic: 'DataManager', partition: 0, offset: 9217 } ],
  sourceModuleName: 'DataManager',
  sourceModuleID: 10040 }

我发现了这个问题,但据我所知,我不应该做一些特别的事情来得到它..

我也发现了这个- 我的版本(npm list protobufjs)返回protobufjs@5.0.1

有任何想法吗?

4

1 回答 1

2

在 Node.js的底层console.log 调用util.inspect。默认情况下,其depth值为 2

为了打印对象的所有属性,您可以util.inspect直接调用:

const util = require('util');

console.log(util.inspect(
    MessageTypeAck.decode(message),
    { showHidden: true, depth: null }
));
于 2016-05-11T19:38:44.200 回答