Node-RED:如何遍历编辑器中的所有节点

Node-RED: how to iterate over all nodes in the editor

如何遍历编辑器中的所有节点(从输入元素事件处理程序中)?

(我想找到一个名称与当前输入匹配的节点)

为了不让这个问题悬而未决:

可以在 some postings written by Nick O'Leary for the Node-RED forum

中找到此问题和类似问题(处理 Node-RED 的内部结构)的答案

以下是那里的副本:

以下内容仅适用于编辑器。这在运行时是不等价的。

按名称查找

无法通过 'name' 直接找到任何内容 - 名称是可选字段,可以留空。它们也不是唯一的。在幕后,您应该使用 id 字段来引用其他节点。

let node = RED.nodes.node(id);

要获取名称 属性 被设置为特定值的任何节点:

let results = [];
RED.nodes.eachNode(function(node) {
   if (node.name === "HELLO") {
      results.push(node);
   }
});

(如果你仔细研究代码,你会发现 RED.nodes.filterNodes 存在 - 目前只过滤 ztype 而不是任何其他 属性。 .. 但它足以更新以处理任何 属性... 我们从来不需要它)

以上适用于常规流节点。要对配置节点或流执行相同的操作,您将执行相同的操作,但分别使用 eachConfig()eachWorkspace()

查找给定节点的连接节点

let node = RED.nodes.node(nodeId);
let allConnectedNodes = RED.nodes.getAllFlowNodes(node)

如果你只想要 'before' 或 'after' 这个节点,你可以这样做:

let allUpstreamNodes = RED.nodes.getAllUpstreamNodes(node);
let getAllDownstreamNodes = RED.nodes.getAllDownstreamNodes(node)