設定

いくつかのノードは構成を共有する必要があります。 たとえばMQTT InおよびMQTT Outノードは、MQTTブローカーの構成を共有し、接続をプールすることができます。 コンフィグレーションノードはデフォルトでグローバルにスコープされます。つまり、フロー間で状態が共有されます。

設定ノードの定義

構成ノードは、他のノードと同じ方法で定義されます。2つの重要な違いがあります:

  1. categoryプロパティをconfigにセットします。
  2. 編集テンプレート<input>の要素idはnode-config-input-<propertyname>です。

remote-server.html

<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/x-red" data-template-name="remote-server">
    <div class="form-row">
        <label for="node-config-input-host"><i class="icon-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="icon-bookmark"></i> Port</label>
        <input type="text" id="node-config-input-port">
    </div>
</script>

remote-server.js

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

この例では、ノードは構成の単純なコンテナとして機能します。実際の実行動作はありません。

設定ノードの一般的な使い方は、リモートシステムへの共有接続を表すことです。 その場合、構成ノードは接続を作成し、構成ノードを使用するノードで接続を使用できるようにすることもできます。 そのような場合、configノードは、ノードが停止したときに切断するcloseイベントも処理する必要があります。

設定ノードの使用

ノードはtype属性が設定ノードのタイプに設定された状態でdefaults配列にプロパティを追加することによって、設定ノードの使用を登録します。

defaults: {
   server: {value:"", type:"remote-server"},
},

他のプロパティと同様に、エディタはnode-input-<propertyname>というIDを持つ編集テンプレート内の<input>を探します。 他のプロパティとは異なり、エディタはこの<input>要素を<select>要素で置き換えます。 この要素には、設定ノードの利用可能なインスタンスが設定されています。 configノードの編集ダイアログを開くためのボタンが表示されます。

ノードはこのプロパティを使用して、ランタイム内のコンフィグノードにアクセスできます。

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.post
        } else {
            // No config node configured
        }
    }
    RED.nodes.registerType("my-node",MyNode);
}