Node-RED处理消息

AI摘要Node-RED是一个开源的网络自动化平台,它使用节点来传递消息。这些节点通过在网络中传递消息来执行各种任务,例如跟踪数据流、处理事件等。 Node-RED的核心概念是流程(flow),它是一个由一系列节点组成的序列,用于完成特定的任务。每个节点都有一组属性,可以配置以执行特定的操作。例如,一个节点可能有一个payload属性,该属性包含要传递给下一个节点的消息。 Node-RED还添加了一个名为_msgid的属性,这是一个标识符,用于跟踪消息的进度。默认情况下,Debug节点将显示这个消息,但也可以配置为显示其他属性或整个消息。 Node-RED还提供了一些内置的节点,如HTTP RequestFunction节点,它们允许用户在节点之间传递消息并执行自定义操作。 此外,Node-RED还支持修改消息属性的功能,这可以通过Change节点实现。这个节点允许用户更改消息的属性,包括值、类型、内容等。 最后,Node-RED还提供了对消息序列的支持,这使得用户可以将多个消息组合成一个更大的消息。

Node-RED流程通过在节点之间传递消息来工作。信息是很简单 JavaScript对象,他包含一组属性。

消息通常有一个 payload 属性——这是缺省属性 大多数节点将与。

Node-RED还添加了一个名为 _msgid 的属性-这是一个标识符 消息,可用于跟踪其通过流的进度。

属性的值可以是任何有效的JavaScript类型,比如:

  • Boolean - truefalse
  • Number-如 0123.4
  • String - "hello"
  • Array - [1,2,3,4]
  • Object- { "a": 1, "b": 2}
  • Null

关于JavaScript类型的更多信息

理解消息的结构

理解消息结构的最简单方法是将其传递给Debug 节点并在Debug侧栏中查看它。

默认情况下,Debug节点将显示 msg.payload 属性,但也可以显示 配置为显示任何属性或整个消息。

显示Array或Object时,侧边栏提供了一个结构化视图 可用于探索消息。

image

  • 在顶部,它显示了传入的属性的名称。在这里, 已使用默认的 msg.payload
  • 属性名称旁边是属性的类型—— ObjectStringArray 等。
  • 然后显示属性的内容。对于数组和对象,属性 折叠成一行。通过单击它,属性将展开 以显示更多细节。

当您将鼠标悬停在任何元素上时,右侧会出现一组按钮:

image

从左到右依次为:

  • :复制 选定元素到剪贴板的路径。在本例中,它将进行复制 payload.Phone[2].type 。这允许您快速确定如何访问 属性在“更改”或“功能”节点中。
  • :复制 将元素的作为JSON字符串发送到剪贴板。注意侧边栏 截断一定长度的数组和缓冲区。复制这样的值 属性将复制截断的版本。
  • :钉住 所选元素,以便始终显示它。当收到另一条消息时 在同一Debug节点中,它会自动展开以显示所有固定的元素。
使用JSON

JSON (JavaScript Object Notation)是一种标准的方法 将JavaScript对象表示为字符串。它通常被web api用于 返回数据。

如果消息属性包含JSON字符串,则必须首先将其解析为其 在它包含的属性可以被访问之前。 要确定属性是否包含字符串或对象,Debug节点可以 被使用。

node - red提供了一个 JSON 节点来完成这个转换。

更改消息属性

流中的一个常见任务是在消息传递时修改其属性 节点之间。例如, HTTP Request 的结果可能是带有的对象 许多属性,其中只有一些是需要的。

有两个主要节点用于修改消息,Function节点Change节点

Function节点允许您对消息运行任何JavaScript代码。这 使您在处理消息时具有完全的灵活性,但确实需要 熟悉JavaScript,在许多简单的情况下是不必要的。更多的 关于编写函数的信息可以在这里找到。

Change节点提供了很多功能,而不需要编写JavaScript 代码。它不仅可以修改消息属性,还可以访问流和 全局上下文。

它提供了四种基本操作:

  • Set 设置一个属性值;
  • Change 通过执行搜索和替换来获取String属性;
  • Delete 删除属性;
  • Move 移动属性。

image

对于 set 操作,首先确定要设置的属性 你想要的值。该值可以是硬编码值,例如 作为字符串或数字,也可以从另一个消息或流/全局获取 上下文属性。它还支持使用JSONata表达式 语言来计算新值。

例如,使用Debug节点确定消息元素路径的能力, 您可以直接将路径粘贴到“to”字段中,并从选项中选择 msg. 列表。然后将 msg.payload 设置为 msg.payload.Phone[2].type 的值。

另一个使用JSONata表达式的示例是转换 温度,保持在 msg.payload.temperature ,从华氏温度到摄氏温度 将结果存储在一个新的消息属性 msg.payload.temperature_c 中。

image

请注意,JSONata表达式看起来很像JavaScript,但有一些关键的区别。 请参阅jsonata.org网站了解更多信息。

消息序列

消息序列是以某种方式相关的消息的有序序列。 例如,Split节点可以将 payload 为Array的单个消息, 转换成一个消息序列,其中每个消息具有与数组元素之一相对应的 payload

理解 msg.parts

序列中的每个消息都有一个名为 msg.parts 的属性。这是一个物体 它包含消息如何适应序列的信息。它有以下内容 属性:

msg.parts.id
序列的唯一标识符
msg.parts.index
消息在序列中的位置
msg.parts.count
如果已知,则序列中的消息总数

注意:parts数组可能包含关于序列的额外元数据。例如, split 节点还附加了 join 节点可以使用的信息 重新组合序列。请参阅 split 节点的文档。

处理序列

有许多核心节点可以跨消息序列工作:

Split分割

将单个消息转换为消息序列。

节点的确切行为取决于 msg.payload 的类型:

String字符串/Buffer缓冲
使用指定的字符拆分消息 (默认值:' \n '),缓冲区序列或固定长度。
Array数组
消息被拆分为单独的数组元素或 固定长度的数组。
Object对象
为对象的每个键/值对发送消息。
Join加入

将消息序列转换为单个消息。

该节点提供三种操作模式:

Automatic自动
尝试反转前一个 Split 节点的操作
Manual手动
允许更精细地控制如何连接序列
Reduce还原
0.18新增功能
允许对序列中的每个消息运行JSONata表达式,并累积结果以生成单个消息。
Sort排序

0.18新增功能

根据属性值或JSONata表达式结果对序列进行排序。

Batch批处理

0.18新增功能

从接收到的消息中创建新的消息序列。

该节点提供三种操作模式:

 
Number of messages消息数
 
将消息分组为给定长度的序列。 重叠选项指定在一个序列的末尾应该有多少条消息 在下一个序列开始时重复。
 
Time interval时间间隔
 
对在指定时间间隔内到达的消息进行分组。 如果在间隔时间内没有消息到达,节点可以选择发送 空的消息。
 
Concatenate Sequences连接序列
 
通过连接创建消息序列 输入序列。每个序列必须有一个 msg.topic 属性 识别它。节点配置了一个要标识的主题值列表 顺序序列被连接起来。
 
 
 

您可能还喜欢...

1 条回复

  1. 2024/06/08

    […] 关于使用Change节点的指南可以参考这里。 […]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.