将嵌套对象的数组转换为Buffer Nodejs

1)为什么? 我需要通过缓冲区rabbitMQ,发布方法http://www.squaremobius.net/amqp.node/channel_api.html#channel_publish
2)我的数据如下所示

[ // array of objects { id: 1, name: 'John Doe', prop: { a: [....], // nested b: [....], c: {...} } }, ... ] 

如何正确地转换这样的对象数组缓冲,所以从另一边可以parsing回来。

1)为什么?

https://www.rabbitmq.com/tutorials/amqp-concepts.html#messages

AMQP消息也有一个有效载荷(它们携带的数据),AMQP代理把它视为一个不透明的字节数组。 经纪人不会检查或修改有效载荷。 消息可能只包含属性而没有有效载荷。 通常使用JSON,Thrift,Protocol Buffers和MessagePack等序列化格式来序列化结构化数据,以便将其发布为消息有效载荷。 AMQP对等方通常使用“内容types”和“内容编码”字段来传达这些信息,但这只是惯例而已。

TL的DR版本就是RabbitMQ不知道你的数据或者它是如何被格式化/编码的。 它将您的消息视为一个字节数组,要求您处理编码。

amqp.node库希望你传递一个缓冲区,因为这是Node.js处理字节数组转换的最简单方法,就像RabbitMQ所期望的那样。

如何正确地转换这样的对象数组缓冲,所以从另一边可以parsing回来。

在你的消息生产者中,你需要将消息数据转换成一个JSONstring(文档),然后从中创build一个缓冲区 。

 var data = [ ... ]; var json = JSON.stringify(data); var buffer = Buffer.from(json); 

在消息消费者方面,你会做相反的事情,使用消息body ,并首先将缓冲区变成一个string 。

 var json = message.body.toString(); var data = JSON.parse(json); 

在这一点上,你的data对象应该是你想要使用的Node.js代码的数据的数组。