【问题标题】:Convert array of nested objects to Buffer Nodejs将嵌套对象数组转换为 Buffer Nodejs
【发布时间】:2016-12-16 15:46:25
【问题描述】:

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: {...}
    }
  },
  ...
]

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

【问题讨论】:

  • Buffer.from(JSON.stringify(thing)) ??

标签: javascript node.js object rabbitmq buffer


【解决方案1】:

1) 为什么?

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

AMQP 消息也有一个有效负载(它们携带的数据),AMQP 代理将其视为一个不透明的字节数组。代理不会检查或修改有效负载。消息可能只包含属性而不包含有效负载。通常使用 JSON、Thrift、Protocol Buffers 和 MessagePack 等序列化格式来序列化结构化数据,以便将其发布为消息有效负载。 AMQP 对等点通常使用“content-type”和“content-encoding”字段来传达此信息,但这只是惯例。

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

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

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

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

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

在消息消费者方面,您会做相反的事情,首先使用消息body 和turn the buffer into a string。

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

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

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2020-03-09
    • 2015-03-26
    • 2019-01-31
    相关资源
    最近更新 更多