跳到主要内容

Node-RED 02:Change 节点的使用

· 阅读需 6 分钟

当涉及到在 Node-RED 中实现灵活的消息转换、修改和删除时,Change 节点成为了一个强大而关键的工具。在这篇文章中,我们将深入探讨 Change 节点的作用、配置选项,带您逐步了解如何优雅地使用这一节点来定制您的 Node-RED 流。

Change 节点:消息的变换术

当需要修改 Node-RED 流程中的消息时,Change 节点成为不可或缺的工具。它为我们提供了设定值、替换值、删除和转移等丰富的功能,使得我们能够灵活地调整前面节点传递的消息,以满足后续节点的特定需求。通过 Change 节点,我们能够轻松地定制和优化消息流,确保信息在流程中传递时达到最佳状态。

了解消息流

为了更好的了解消息是如何在流程中进行传递的,我们先放置一个 Inject 节点,并设置 payload 为 "Hello World!",如下图所示:

再放置一个 debug 节点,并设置输出的内容为 "与调试输出相同",以输出整个消息的内容,如下图所示:

当我们点击 inject 节点左侧的按钮时消息将流经我们的流程,并在调试窗口中输出消息的内容,可以看到输出的内容为一个 JSON 对象的结构,包含了 payload,topic 和_msgid 这三个属性,如下图所示:

change 节点功能

1. 设置值 (Set)

设置值可以实现对消息的现有某个属性的值进行设置、修改和复制,如下图所示:

可以看到流程执行后 payload 属性被修改,同时添加了一个新的属性 value 并将 payload 属性复制给了 topic 属性,如下图所示:

对值进行深拷贝

当设置值时,如果所设置的值也是消息的某个属性,并且未勾选 "对值进行深拷贝" 选项时,若该属性为一个对象,那么这两个属性将共享同一个对象引用。这可能导致在修改其中一个属性时,另一个属性也会同时改变。若您不希望发生这种情况,建议勾选该选项。这样,在设置值时,原对象将会被深度复制,创建一个新的副本,从而确保两个属性的修改不会相互影响。这一选择提供了更灵活的数据管理方式,避免了潜在的引用传递问题。

2. 替换值 (Change)

在使用 Change 节点进行替换值时,节点提供了一项关键功能:能够根据特定条件检查属性中是否包含目标内容,并随后执行替换操作。如下图所示:

3. 删除 (Delete)

删除的功能非常简单,可以将消息的某个属性进行删除,如下图所示:

4. 转移 (Move)

转移功能会将原属性删除,并将原属性的值赋值给一个新的属性,相当于通知执行了设置值和删除两个动作。如下图所示:

change 节点的其他知识

  • • 可以使用 "." 和 "[]" 访问属性中的数组和属性中的子属性

  • • change 节点中的每个步骤是按顺序执行的,拖动左侧的图标可以调整执行顺序
  • • change 界面不但可以对消息的内容进行修改,还能修改 flow 和 global 上下文中的属性

总结

Change 节点在 Node-RED 中扮演着至关重要的角色,为用户提供了丰富的功能,用于定制和优化消息流。通过设定值、替换值、删除和转移等操作,Change 节点使得用户能够灵活地处理消息,确保其在整个流程中按照预期方式传递和被处理。

在处理消息时,Change 节点的深拷贝功能提供了额外的保障,避免了引用传递可能引发的问题,确保各节点间的数据隔离和一致性。

此外,Change 节点的条件执行和表达式支持,使得用户能够根据具体需求制定精细的规则,更好地适应不同的应用场景。

通过深入了解 Change 节点的各项功能,Node-RED 用户可以更加灵活地定制其流程,确保数据的准确性和流畅性。因此,熟练运用 Change 节点将为 Node-RED 流程的设计和实施带来更大的便利。

欢迎关注我的公众号 “nodered-co”,原创技术文章第一时间推送。