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;
多条消息
可通过在返回数组中返回消息数组实现在一个输出中返回多条消息。当一个输出返回多条消息时,后面的节点将根据返回顺序一个接收一条消息
在如下例子中,msg1,msg2,msg3将被发送至第一个输出。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进行投诉反馈,一经查实,立即删除!