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);

原文地址:https://blog.csdn.net/weixin_42911934/article/details/127846820

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17907.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注