Node-Red创建自定义节点

一、如何修改工程为自定义路径

Windows本地部署了Node-red后,一般来说其配置数据文件(一般是settings.js)和流文件(一般是flow_<hostname>.json)会默认放在用户目录的.node_red子目录中,即:

C:\Users\Administrator\.node-red

 

但是我们经常需要建立自己的工程目录(如C:\myproject),并把相关数据放在该目录中,那么就要做如下的事情:

1)建立工程目录F:\program\nodejs\nodered\mytest,将settings.js拷贝到该目录中。

2)修改C:\myproject\settings.js文件中的userDir参数为F:\program\nodejs\nodered\mytest。如果想把Node-red UI的root目录也修改为工程目录的话,则需要将settings.js文件中的httpRoot和httpStatic参数数值修改为

F:\program\nodejs\nodered\mytest

Node-Red创建自定义节点

 

 

3)在启动Node-red的cmd或者bat文件的命令行中加入如下参数 --settings F:\program\nodejs\nodered\mytest,即:

> node-red --settings F:\program\nodejs\nodered\mytest

node-red --settings F:/program/nodejs/nodered/mytest/settings.js

二、如何创建自定义节点

每一个自定义节点的都由一对文件组成:

  • 一个定义节点功能的JavaScript文件,
  • 定义节点属性,编辑对话框和帮助文本的html文件。

 

1. 创建一个可以转换消息字符为小写的节点

确保系统的node版本位于10以上,创建一个目录node-red-contrib-example-lower-case,并在目录中创建以下文件:

  • package.json
  • lower-case.js
  • lower-case.html

1)初始化package.json文件

使用npm init 生成标准package.json文件,可以使用命令npm init,并在生成命令执行出现提示时,为将文件命名为 node-red-contrib-example-lower-case。初始化完成json文件后,必须在文件中添加一个node-red部分:

{
    "name" : "node-red-contrib-example-lower-case",
    ...
    "node-red" : {
        "nodes": {
            "lower-case": "lower-case.js"
        }
    }
}

这里的描述告诉模块运行时包含了哪些节点文件。

2)创建对应的js文件

这里的js文件用于执行运行时的后台处理逻辑,示例代码如下:

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        node.on('input', function(msg) {
            msg.payload = msg.payload.toLowerCase();
            node.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}

该节点被包装为Node.js模块。该模块导出一个函数,该函数在运行时在启动时加载节点时被调用。使用单个参数调用该函数,该参数RED提供模块对Node-RED运行时api的访问权限。

节点本身是由一个函数定义的,LowerCaseNode只要创建该节点的新实例,就会调用该函数。向其传递一个对象,该对象包含在流编辑器中设置的特定于节点的属性。

该函数调用该RED.nodes.createNode函数以初始化所有节点共享的功能。之后,特定于节点的代码生效。

在这种情况下,节点注册input事件的侦听器,每当消息到达节点时,该事件就会被调用。在此侦听器内,它将输入参数更改为小写,然后调用该send函数以在流中传递消息。

最后,LowerCaseNode使用节点名称将该函数注册到运行时lower-case。

如果节点具有任何外部模块依赖性,则必须将其包含在dependencies 其package.json文件的部分中。

3)创建对应HTML文件

HTML文件为自定义节点的配置界面描述,示例代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Node-Red mytest</title>
</head>
<body>
<script type="text/javascript">
    RED.nodes.registerType('lower-case',{
        category: 'function',
        color: '#a6bbcf',
        defaults: {
            name: {value:""}
        },
        inputs:1,
        outputs:1,
        icon: "file.png",
        label: function() {
            return this.name||"lower-case";
        }
    });
</script>

<script type="text/html" data-template-name="lower-case">
    <div class="form-row">
        <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
</script>

<script type="text/html" data-help-name="lower-case">
    <p>A simple node that converts the message payloads into all lower-case characters</p>
</script>

</body>
</html>

 

节点的HTML文件提供以下内容:

  • 在编辑器中注册的主节点定义
  • 编辑模板
  • 帮助文字

在此示例中,节点具有单个可编辑属性name。尽管不是必需的,但此属性有一个广泛使用的约定,以帮助区分单个流中节点的多个实例。

 

2. 添加节点

1)在自定义工程目录(或默认的nodered安装目录C:\Users\my_name\.node_red )下,安装上面创建的节点:

npm install F:\program\nodejs\nodered\node-red-contrib-example-lower-case --no-save

2)以自定义工程目录启动node red

node-red --settings F:/program/nodejs/nodered/mytest/settings.js

Node-Red创建自定义节点

 

 

3. 测试使用

在网页端添加自定义节点,传入参数验证是否实现预计的效果:

Node-Red创建自定义节点

 

如上如,添加自定义节点后,传入大写信息,注入后输出小写信息,验证无误。

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:做Java开发7年,今年9个月时间圆梦饿了么P7


下一篇:mysql 批量修改表列明为大小写