有些节点需要共享配置。例如,MQTT 输入(MQTT In)和 MQTT 输出(MQTT Out)节点共享 MQTT代理(broker)的配置,从而使它们可以共用连接。配置节点默认是全局作用域的,这意味着它们的状态将在所有流之间共享。
配置节点的定义方式与其他节点相同,但有两个关键区别:
category
属性被设置为 config
<input>
元素的 id 为 node-config-input-<propertyname>
<script type="text/javascript">
RED.nodes.registerType('remote-server',{
category: 'config',
defaults: {
host: {value:"localhost",required:true},
port: {value:1234,required:true,validate:RED.validators.number()},
},
label: function() {
return this.host+":"+this.port;
}
});
</script>
<script type="text/html" data-template-name="remote-server">
<div class="form-row">
<label for="node-config-input-host"><i class="fa fa-bookmark"></i> Host</label>
<input type="text" id="node-config-input-host">
</div>
<div class="form-row">
<label for="node-config-input-port"><i class="fa fa-bookmark"></i> Port</label>
<input type="text" id="node-config-input-port">
</div>
</script>
module.exports = function(RED) {
function RemoteServerNode(n) {
RED.nodes.createNode(this,n);
this.host = n.host;
this.port = n.port;
}
RED.nodes.registerType("remote-server",RemoteServerNode);
}
在此示例中,该节点仅作为配置的简单容器——它没有实际的运行时行为。
配置节点的一个常见用途是表示与远程系统的共享连接。在这种情况下,配置节点可能还负责创建连接并使其可供使用该配置节点的节点使用。在这种情况下,当节点停止时,配置节点还应处理 close
事件以断开连接。
节点通过向 defaults
数组中添加一个属性来注册它们对配置节点的使用,该属性的 type
属性设置为配置节点的类型。
defaults: {
server: {value:"", type:"remote-server"},
},
与其他属性一样,编辑器会在编辑模板中查找一个 id 为 node-input-<propertyname>
的 <input>
。但不同的是,编辑器会将这个 <input>
元素替换为一个 <select>
元素,该元素填充了配置节点的可用实例,并带有一个用于打开配置节点编辑对话框的按钮。
然后,节点可以在运行时使用此属性来访问配置节点。
module.exports = function(RED) {
function MyNode(config) {
RED.nodes.createNode(this,config);
// Retrieve the config node
this.server = RED.nodes.getNode(config.server);
if (this.server) {
// Do something with:
// this.server.host
// this.server.port
} else {
// No config node configured
}
}
RED.nodes.registerType("my-node",MyNode);
}
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有注册商标并使用商标。有关 OpenJS Foundation 的商标列表,请参阅我们的商标政策和商标列表。未在 OpenJS Foundation 商标列表中注明的商标和徽标是其各自所有者的商标™或注册®商标。使用它们并不意味着与它们有任何关联或得到它们的认可。
OpenJS 基金会 | 使用条款 | 隐私政策 | OpenJS 基金会章程 | 商标政策 | 商标列表 | Cookie 政策