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

时间:2016-12-16 15:46:26

标签: javascript node.js object rabbitmq buffer

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

QPushButton:focus {
   border: none;
   outline: none;
}

如何正确地将这样的对象数组转换为缓冲区,因此从另一方面可以解析回来。

1 个答案:

答案 0 :(得分:3)

  

1)为什么?

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

  

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

TL; DR版本是RabbitMQ对您的数据或其格式化/编码方式一无所知。它将您的消息视为一个字节数组,要求您处理编码。

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

  

如何正确地将这样的对象数组转换为缓冲区,因此从另一方面可以解析回来。

在您的消息生成器中,您需要将消息数据转换为JSON字符串(文档),然后再转换为create a buffer

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

在消息使用者方面,您首先会使用消息bodyturn the buffer into a string执行相反的操作。

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

此时,您的data对象应该是您想要的Node.js代码所需的数据数组。