Skip to main content

Node-RED 04:Function 节点详细介绍

· 6 min read

Function 节点是 Node-RED 中非常重要的一个节点,允许用户使用 JavaScript 编写自定义代码,以实现复杂的数据处理和逻辑控制。通过 Function 节点,用户可以灵活地操作消息数据,进行数据转换、条件判断等。

Function 节点的基本用法

1. 添加 Function 节点

在 Node-RED 编辑器中,从左侧节点库中拖拽 Function 节点到画布上。

2. 配置 Function 节点

  • • 双击节点打开配置窗口。
  • • 输入节点名称(可选)。
  • • 在函数输入框中编写 JavaScript 代码。例如,将消息 payload 转换为大写:
msg.payload = msg.payload.toUpperCase();
return msg;

  • • 保存配置。

透过以上步骤就完成了一个最基础的 function 节点的应用,将传入的 payload 转换为大写。在 function 节点中还有很多的细节功能,接下来将介绍其中几个比较常用的功能。

处理多个输出

1. 多输出的设置

当我们需要在 function 节点中创建多个输出时,在设置页签可以指定 function 节点的输出数量,如下图所示

在默认的情况下 function 节点只有一个输出,并直接返回 msg 对象进行输出,在设置了多个输出后需要在函数中返回一个数组,这个数组中的每一个元素对应着 function 节点的一个输出。

2. 多个输出中根据条件进行输出

在某些情况下我们希望 function 的多个输出节点根据函数中的条件进行判断,在不同的条件下触发不同的输出,这种情况我们可以使用 null 值来阻止对应的输出,比如三个输出中,将第二个元素设置为 null 则第二个输出不会触发后续的流程,达到阻止某个输出的情况。

循环发送多个消息

前面我们介绍的触发 function 节点后续流程的方式都是使用 return,但是 return 将会直接对函数进行返回,返回将会阻止后续的代码的继续执行,有时在流程中我们需要处理一个数组中的数据,对数组的数据进行处理后,每个元素都触发后续流程的执行,此时可以使用 node.send 方法来发送发送消息给后续的流程,且不会中断当前 function 节点对后续元素的影响。

日志与调试输出

function 节点中提供了以下三个方法,可以在 function 运行时输出不同等级的日志,从而协助我们对 function 节点进行调试和日志的记录。

注意: node.log 只会输出到 node-red 的控制台,而不会输出到 node-red 的调试窗口,node.warn 和 node.error 将会同时输出到 node-red 的调试窗口

node.log("这是一行普通日志");
node.warn("这是一行警告日志");
node.error("这是一行错误日志");

另外我们还可以使用 node.status 方法来设置 function 节点的状态。

node.status({fill:"red",shape:"ring",text:"disconnected"});
node.status({fill:"green",shape:"dot",text:"connected"});
node.status({text:"Just text status"});
node.status({});   // 清空状态

上下文数据

在 function 节点中除了能使用在 change 节点中也可以使用的 flow/global 这两个作用域的上下文数据,还有一个在节点作用域内的上下文数据。使用 context 变量进行访问。如下图所示使用 context 变量实现了对节点消息处理次数的统计。

总结

Node-RED 的 Function 节点提供了强大的数据处理和逻辑控制能力。通过本文的详细介绍,希望读者能够全面掌握 Function 节点的使用,包括基本用法、输出处理、多输出创建、循环消息的触发,调试输出及上下文数据的使用。在实际项目中灵活应用这些技巧,可以显著提高开发效率和程序的灵活性。如果有更多的想法,欢迎给我发送消息或留言,Node-RED 社区和官方文档也是很好的资源。

欢迎关注我的公众号 “nodered-co”,原创技术文章第一时间推送。

关注公众号并回复 “教程” 获取约 200 页 "Node-red 中文教程 "

Node-red function 节点官方文档 [1]

引用链接

[1] Node-red function 节点官方文档: https://nodered.org/docs/user-guide/writing-functions