Node-RED:Создание нод/Конфигурационные ноды
Конфигурационные ноды[1]
Некоторым нодам необходимо иметь общие настройки. К примеру, ноды «MQTT in» и «MQTT out» имеют общие настройки MQTT-брокера, что позволяет сгруппировать их в одно MQTT-соединение. По умолчанию конфигурационные ноды работают в глобальном контексте, и это значит, что их информацией об их состоянии могут пользоваться все потоки.
Создание конфигурационной ноды
Конфигурационная нода создается так же, как и прочие ноды. Но есть два важных отличия:
- В ее свойстве «category» должно стоять «config»
- В ее HTML-шаблоне элементы <input> имеют ID «node-config-input-<название_свойства>»
Файл «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);
}
В этом примере нода служит простым контейнером для настроек. Но здесь не задано то, как она будет вести себя в среде выполнения Node-RED.
Часто конфигурационные ноды используются, чтобы задать общие настройки для подключения к удаленной системе. В этом случае конфигурационная нода также может быть ответственна за создание соединения и то, чтобы этим соединением могли пользоваться другие ноды, использующие эту конфигурационную ноду. В таких случаях конфигурационная нода также должна обрабатывать событие «close», чтобы отключать соединение при остановке работы ноды.
Использование конфигурационной ноды
Использование конфигурационных нод обычными нодами задается путем добавления в массив «defaults» нового свойства, где атрибутом «type» служит тип нужной конфигурационной ноды.
defaults: {
server: {value:"", type:"remote-server"},
},
Как и в случае с другими свойствами, редактор ищет в HTML-шаблоне элемент <input> с ID «node-input-<название_свойства>». Но, в отличие от других свойств, редактор заменяет элемент <input> на элемент <select>, содержащий доступные экземпляры конфигурационной ноды, а также добавляет кнопку (с карандашом) для открытия меню редактирования конфигурационной ноды.
После этого нода сможет использовать это свойство, чтобы получить доступ к конфигурационной ноде в среде выполнения Node-RED.
module.exports = function(RED) {
function MyNode(config) {
RED.nodes.createNode(this,config);
// Извлекаем данные конфигурационной ноды:
this.server = RED.nodes.getNode(config.server);
if (this.server) {
// Делаем что-то с:
// this.server.host
// this.server.port
} else {
// Конфигурационной ноды не задано
}
}
RED.nodes.registerType("my-node",MyNode);
}
См.также
Внешние ссылки