Node-RED function节点使用

function节点允许使用JavaScript处理通过它的消息
消息以名为msg的对象进入
其他节点可能会在消息中附加它们的属性

编写方法

function节点中的代码表示方法的主体。最简单的方法仅简单返回消息:

return msg;

如果方法返回null,消息将不在传递且流程结束
方法必须返回一个对象。返回数字或字符串将产生错误
返回的消息对象不必是传入的对象;方法在返回前可构造一个完整的新对象,例如:

var newMsg = { payload: msg.payload.length };
return newMsg;

使用node.warn()在侧边栏显示警告以帮助调试。例如:

node.warn("my var xyz = " + xyz);

多个输出

方法编辑框允许改变输出个数。如果超过一个输出,方法返回一个消息数组发送至输出
这易于编写一个依据某些条件发送消息至不同输出的方法。例如,以下方法将发送banana主题中消息至第二个输出,而非第一个输出:

if (msg.topic === "banana") {
   return [ null, msg ];
} else {
   return [ msg, null ];
}

接下来的例子在第一个输出上传递原始消息,包含载体长度的消息传递至第二个输出:

var newMsg = { payload: msg.payload.length };
return [msg, newMsg];

node.outputCount包含了function节点配置的输出个数
可编写处理来自编辑框的输出集合可变个数的通用方法
例如如果你希望将消息随机传播至输出,你可以:

// 根据输出个数创建数组
const messages = new Array(node.outputCount)
// 选择随机发送的输出
const chosenOutputIndex = Math.floor(Math.random() * node.outputCount);
// 仅对选择的输出发送消息
messages[chosenOutputIndex] = msg;
// 返回数组
return messages;

现在你可以只通过编辑框配置输出个数,而不必改变方法

多条消息

可通过在返回数组中返回消息数组实现在一个输出中返回多条消息。当一个输出返回多条消息时,后面的节点将根据返回顺序一个接收一条消息
在如下例子中,msg1msg2msg3将被发送至第一个输出。msg4将被发送至第二个输出

var msg1 = { payload:"first out of output 1" };
var msg2 = { payload:"second out of output 1" };
var msg3 = { payload:"third out of output 1" };
var msg4 = { payload:"only message from output 2" };
return [ [ msg1, msg2, msg3 ], msg4 ];

如下例子将收到的消息分隔为单独的词语并逐一返回

var outputMsgs = [];
var words = msg.payload.split(" ");
for (var w in words) {
    outputMsgs.push({payload:words[w]});
}
return [ outputMsgs ];

异步发送消息

如果发送消息前需要执行异步操作,则不能在方法结束时返回消息
必须使用node.send()方法发送消息
例如:

doSomeAsyncWork(msg, function(result) {
    msg.payload = result;
    node.send(msg);
});
return;

function节点将克隆传递给node.send的每个消息对象以确保方法再次使用消息对象时没有意外的改变。在Node-RED 1.0之前,function节点不会克隆第一条消息,但会克隆剩余的
通过传递false作为node.send方法的第二个参数,可不克隆传给方法的第一条消息

node.send(msg,false);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node-RED是一个开源的流程编程工具,使用JavaScript进行编写。在Node-RED中,可以使用全局变量(global context)来在不同的流程节点之间共享数据。 要使用Node-RED的全局变量,需要以下几个步骤: 1. 在Node-RED的工作空间中找到右上角的"菜单按钮",点击后选择"Manage palette"。 2. 在"Manage palette"页面中,选择"Install"选项卡,然后搜索"node-red-contrib-contextbrowser"插件并点击"Install"按钮进行安装。 3. 安装完毕后,在左侧的工具箱中可以找到名为"context browser"的节点,将此节点拖动到工作区中。 4. 在工作区中,将context browser节点连接到需要使用全局变量的节点上(例如:inject节点)。 5. 双击context browser节点,该节点会显示当前工作区中定义的所有全局变量。 6. 在节点的配置属性中,可以设置全局变量的名称和默认值。 7. 在输入节点或其他需要使用全局变量的节点中,可以使用"msg.global"来访问全局变量的值。 例如:在一个Function节点中,可以通过msg.global.variable_name来访问全局变量的值,并进行相应的处理。 需要注意的是,全局变量是在整个Node-RED实例中共享的,因此可以在不同的流程中使用相同的全局变量。但是需要谨慎使用全局变量,避免不必要的复杂性和混乱。同时,建议在使用全局变量时进行正确的命名和初始化,以避免因为变量名冲突或未定义而引发问题。 总结来说,使用Node-RED的全局变量可以通过安装插件、配置节点和访问变量的方式来实现。全局变量的使用可以方便数据在不同的节点之间进行共享和传递,提高流程的灵活性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值