在 Node-red 中替换消息之间的主题

Replace Topics between messages in Node-red

我是 Node-Red 的初学者,我创建了以下示例。我想将数据的值从 "numeric" 替换为 "payload".

来自 "Payload" 的消息如下:

{
"deviceId" : "MyAzureWebApp";
"key" : "xxx";
"protocol" : "mqtt",
"data" : "{tem:25, wind:20}"
}

来自 "numeric" 的消息如下:

{
"data":"{tem: 10, wind: 10}"
}

在我添加的功能块中:

msg.payload.replace((msg.payload.data), (msg.numeric.data));
return msg;

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

消息彼此独立地通过流。这意味着当您注入 "Payload" 消息时,它将到达函数节点,函数节点将 运行 然后将其转发到调试节点。

当您注入 "numeric" 消息时,它也会执行相同的操作。

功能节点(和所有节点)一次只处理一条消息,它不保存 "state" 上一条消息。

如果您想根据以前的消息转换消息,您需要学习使用 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 之前到达并且消息将始终成对到达。但它应该给你一些开始。