在节点红色中的消息之间替换主题

时间:2018-11-14 15:40:37

标签: node-red

我是Node-Red的初学者,并创建了以下示例。我要将数据的值从“数字”替换为“有效载荷”的地方。

Node-red Diagram

来自“有效载荷”的消息如下:

{
"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;

不幸的是,到目前为止,我所做的没有奏效,我仍然不知道如何解决该问题。我尝试使用更改模块,但它仅接受一个条目。因此,如果有人可以帮助我,我将不胜感激。 :)

1 个答案:

答案 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之前到达,并且消息总是成对到达。但这应该给您一些开始。