我是Node-Red的初学者,并创建了以下示例。我要将数据的值从“数字”替换为“有效载荷”的地方。
来自“有效载荷”的消息如下:
{
"deviceId" : "MyAzureWebApp";
"key" : "xxx";
"protocol" : "mqtt",
"data" : "{tem:25, wind:20}"
}
来自“数字”的消息如下:
{
"data":"{tem: 10, wind: 10}"
}
在功能块中添加:
msg.payload.replace((msg.payload.data), (msg.numeric.data));
return msg;
不幸的是,到目前为止,我所做的没有奏效,我仍然不知道如何解决该问题。我尝试使用更改模块,但它仅接受一个条目。因此,如果有人可以帮助我,我将不胜感激。 :)
答案 0 :(得分:1)
消息在流中彼此独立传播。这意味着,当您注入“有效载荷”消息时,它将到达功能节点,该功能节点将运行,然后将其转发到调试节点。
当您注入“数字”消息时,它将执行相同的操作。
功能节点(和所有节点)一次只能处理一条消息,不保留有关上一条消息的“状态”。
如果要基于先前的消息来转换消息,则需要学习使用context对象来存储信息。您可以使用上下文来存储值,并稍后在功能节点和更改节点中检索它们。
在功能节点中,您还需要一种方法来区分消息的来源。通常的方法是使用msg.topic
值。
一个满足您需求的非常粗糙的例子是:
if (msg.topic == 'numeric') {
context.set('foo', msg.payload);
return null;
} else if (msg.topic == 'payload') {
msg.payload = context.get('foo');
return msg;
}
这使numeric
之类的所有假设之王总是在payload
之前到达,并且消息总是成对到达。但这应该给您一些开始。