NodeRed使用来自先前节点输出的味精有效负载填充节点形式

问题描述

我有几个自定义节点,它们可以连接到Web服务以提取具有原子ID的数据。我想用一个节点插入所有项(json有效载荷数组),添加到msg有效载荷,并使用该有效载荷.on(“ input”)在第二个节点的html中填充配置表单。

module.export = (RED) => {
    let data = [];
    const getAllNode = () => {
       // promised data returned 
       data = service.getAllData(config);
       let node = this;
        RED.nodes.createNode(node,config);

        node.on('input',(msg) => {
             // simple pseudo but this part works fine
             msg.payload = data;

             node.send(msg);
        })
    }

    RED.nodes.registerType("get-all",getAllNode);
}

针对msg.payload属性设置数据,如下所示:

[
     { first: "Bob",last: "Smith",age: 45,id: 241 },{ first: "Karen",last: "NotthatKaren",age: 32,id: 112 },{ first: "Latisha",last: "Rhodes",age: 41,id: 742 }
]

在下一个节点中,我想设置HTML(如果可能的话),该HTML将根据进入其中的msg有效负载显示仅名字的选择框.....这是否可以动态更改.on(“ input”)收到味精时的html?

<script type="text/html" data-template-name="some-binding">
    template something here based on a template/data binding??
</script>

解决方法

否,您不能基于先前节点的输入来更改显示的设置。

此外,每个节点配置都应独立于任何其他节点,但它们可以共享配置节点。节点无需了解流中先/后的节点的任何信息(通过将响应对象附加到msg来解决诸如http-in / http-out之类的问题)

您必须了解节点的两个部分(HTML,JS)是完全独立的。 HTML部分在浏览器中运行,JS部分在后端运行。后端无权访问HTML部分。

还值得记住的是,如果从空白画布开始并添加拳头节点,然后将第二个节点连接在一起,直到您单击deploy之前,它们之间就不会传递任何消息,因此第一个没有办法节点以填充第二个。

虽然您可以选择使用消息中附带的数据替换HTML中输入的设置,但无法将这些数据保持为流的保存状态。

如果节点的配置取决于某些后端系统,则可以在HTML部分中发出HTTP请求以请求每个节点的数据,您可以在onEditPrepare回调中进行发送,也可以附加HTML表单中项目的事件处理程序可按需执行此操作,例如到按钮。如果需要,您可以将HTTP路由添加到您的JS文件中,可以从HTTP调用该HTTP路由来解决交叉站点访问问题。有关示例,请参见“串行端口”核心节点。