您有来自不同来源的消息需要合并成一条消息。
例如,您有三个不同的传感器发布值,并且您想将它们作为单个条目插入数据库中。
为每个流赋予唯一的 msg.topic
值,并使用 Join
节点将它们组合成一条消息。
[{"id":"8ccddb9a.a55f38","type":"inject","z":"ac14500e.2c57d","name":"temperature","topic":"temperature","payload":"10","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":1760,"wires":[["47b769c5.cb0e28"]]},{"id":"47b769c5.cb0e28","type":"join","z":"ac14500e.2c57d","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":310,"y":1800,"wires":[["f9afb265.b11b7"]]},{"id":"f9afb265.b11b7","type":"debug","z":"ac14500e.2c57d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":470,"y":1800,"wires":[]},{"id":"2d269127.4f04ce","type":"inject","z":"ac14500e.2c57d","name":"humidity","topic":"humidity","payload":"","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":1800,"wires":[["47b769c5.cb0e28"]]},{"id":"d6fbe805.0e4628","type":"inject","z":"ac14500e.2c57d","name":"pressure","topic":"pressure","payload":"999","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":1840,"wires":[["47b769c5.cb0e28"]]}]
在示例流程中,每个 Inject
节点代表不同的消息源。它们都设置了唯一的 msg.topic
值,以便稍后在流程中识别它们。
Join
节点已配置为手动模式,使用 msg.topic
作为键名创建键/值对象。由于我们知道有三个独立的消息流要连接,因此该节点已配置为在接收到该数量的部分时发送消息。
这意味着它每次收到来自三个不同主题的至少一条消息时,都会发送一条消息,并使用每个主题的最新值。
{
"temperature":10,
"humidity":0,
"pressure":999
}
该节点还有其他未在此配方中使用的选项来更改其行为。例如,可以设置超时,以确保在其中一个传感器停止发送值时它会发送_一些东西_。如果这是一个问题,您可以考虑此配方以提供占位符值。
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 已注册商标并使用商标。有关 OpenJS Foundation 商标列表,请参阅我们的商标政策和商标列表。未在OpenJS Foundation 商标列表上指明的商标和徽标是其各自持有者的商标™或注册®商标。使用它们并不意味着与它们有任何关联或得到它们的认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策