MQTT中文站
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
      • Node-RED 安装部署
      • Node-RED 用户指南
      • Node-RED 创建节点
      • Node-RED 示例教程
      • Node-RED 开发流程
      • Node-RED 接口参考
      • Node-RED 配置模板
      • Node-RED 常见问题
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册

Node-RED-创建您的第一个节点

2 年前 • Node-RED 创建节点

创建你的第一个节点

当一个流程部署后,节点会被创建。当流程运行时,节点会进行消息的发送和接收;当下一个流程被部署时,原先的节点则被删除。

每个节点由三部分组成:

  • 一个JavaScript文件:定义了节点的功能。
  • 一个html文件:定义了节点的属性、编辑界面和帮助文本。
  • 一个package.json文件:用于将以上内容打包为npm模块。

创建一个简单的节点

下面的示例会教你如何创建一个能够将消息内容转为小写的节点。

首先,确保你的电脑上安装了Node.js的长期支持版本。本文写作时使用的版本是10.x。

在你想要写代码的文件夹中,创建以下三个文件:

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

这是用于描述Node.js模块内容的标准文件。

你可以运行npm init来生成这个文件,系统会询问你一些问题来帮你创建文件的初始内容。当系统提示你输入名字时,可以命名为node-red-contrib-example-lower-case。

生成后,你需要增加一个node-red的部分:

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

这样就可以告诉Node-RED哪些文件是节点文件。

关于如何打包节点,包括发布节点前的命名和其他要求,你可以参考相关打包指南。

注意:这只是一个示例,请不要将次节点发布到npm上!

lower-case.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模块中。这个模块会导出一个函数,这个函数在Node-RED启动并加载节点时会被调用,这个函数有一个RED参数,它使模块能够访问Node-RED的运行时API。

节点的定义是通过一个函数完成的,这个函数在每次创建节点的实例时都会被调用。这个函数会接收一个对象,这个对象包含了在流编辑器中为节点设置的特性。LowerCaseNode

这个函数首先调用了RED.nodes.createNode来初始化节点的基本功能。接着,特定于节点的代码就开始运行。

在这里,节点注册了一个监听input事件的监听器,这个监听器会在节点收到消息时被调用。监听器会将消息内容转为小写,然后调用send函数将消息发送到流中。

最后,节点使用名为“lower-case”的名称注册到了运行时。

如果节点依赖其他外部模块,那些模块必须在package.json文件的dependencies部分列出。

更多关于节点的运行时部分的信息,请查阅相关文档。

lower-case.html
<script type="text/javascript">
    RED.nodes.registerType('lower-case',{
        category: 'function',
        color: '#a6bbcf',
        defaults: {
            name: {value:""}
        },
        inputs: 1,
        outputs: 1,
        icon: "file.svg",
        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> 名称</label>
        <input type="text" id="node-input-name" placeholder="名称">
    </div>
</script>

<script type="text/html" data-help-name="lower-case">
    <p>这是一个简单的节点,可以将消息内容转为小写。</p>
</script>

节点的HTML文件主要包含三部分:

  • 注册到编辑器的主要节点定义。
  • 节点的编辑模板。
  • 节点的帮助文本。

在这个示例中,节点有一个可以编辑的属性,叫做name。尽管这并不是必须的,但在同一个流程中使用多个相似的节点时,给每个节点命名可以帮助你区分它们。

关于节点编辑部分的更多信息,你可以查阅相关文档。

如何在Node-RED中测试你的节点

按照上面的步骤创建了基础节点模块后,你就可以在Node-RED运行时中安装并测试它了。

为了在本地测试这个节点模块,你可以使用npm install <文件夹路径>。这样你就可以在本地目录中开发节点,同时将它链接到你的Node-RED安装中。

在Node-RED的用户目录中(通常是~/.node-red)执行:

npm install <你的节点模块的路径>

例如,如果你在Mac OS或Linux上的节点路径是~/dev/node-red-contrib-example-lower-case,你应该这样操作:

cd ~/.node-red
npm install ~/dev/node-red-contrib-example-lower-case

对于Windows用户:

cd C:\Users\你的用户名\.node_red
npm install C:\Users\你的用户名\Documents\GitHub\node-red-contrib-example-lower-case

这会在~/.node-red/node_modules中为你的节点模块创建一个链接,这样在启动Node-RED时,它就会加载这个节点。你只需重启Node-RED,就可以查看节点的变化了。同样,在Windows上使用npm 5.x或更高版本:~/.node-red/node_modules

单元测试

为了支持单元测试,你可以使用一个叫做 node-red-node-test-helper 的 npm 模块。这个测试助手基于 Node-RED 运行时,并使节点的测试变得更为简单。

借助这个框架,你可以设计测试流,并验证节点的属性和输出是否符合预期。例如,若想给 lower-case 节点添加单元测试,你可以在节点模块包里新建一个名为 test_spec.js 的文件。

test/lower-case_spec.js

var helper = require("node-red-node-test-helper");
var lowerNode = require("../lower-case.js");

describe('lower-case Node', function () {

  afterEach(function () {
    helper.unload();
  });

  it('should be loaded', function (done) {
    var flow = [{ id: "n1", type: "lower-case", name: "test name" }];
    helper.load(lowerNode, flow, function () {
      var n1 = helper.getNode("n1");
      n1.should.have.property('name', 'test name');
      done();
    });
  });

  it('should make payload lower case', function (done) {
    var flow = [{ id: "n1", type: "lower-case", name: "test name",wires:[["n2"]] },
    { id: "n2", type: "helper" }];
    helper.load(lowerNode, flow, function () {
      var n2 = helper.getNode("n2");
      var n1 = helper.getNode("n1");
      n2.on("input", function (msg) {
        msg.should.have.property('payload', 'uppercase');
        done();
      });
      n1.receive({ payload: "UpperCase" });
    });
  });
});

这些测试旨在验证节点是否被正确加载,并且能否正确地将有效载荷转为小写。

两个测试都通过 helper.load 方法将节点加载进运行时。第一个测试核实运行时的节点是否具有预期的名字属性。第二个测试利用助手节点来验证节点输出的确为小写。

助手模块中还包含了许多来自 Node-RED 核心节点的测试样例。要了解更多关于助手模块的信息,你可以查阅相关的 README。

打赏赞(1)微海报分享
node-red

Node-RED 管理员用户API使用方法

车联网与MQTT:实现可靠的消息传输

猜你喜欢

西门子 S7 PLC 交互的 Node-RED 节点

西门子 S7 PLC 交互的 Node-RED 节点

12/10
2023
将Node-RED应用到物联网和边缘计算场景

将Node-RED应用到物联网和边缘计算场景

10/02
2023
Node-RED API 数据类型

Node-RED API 数据类型

09/26
2023
  • 解决方案
    • 智能家居
    • 汽车与出行
    • 工业制造
    • 能源电力
    • 石油石化
    • 交通物流
    • 零售
  • 学习
    • MQTT 规范
    • MQTT 教程
    • MQTT 软件
    • MQTT 客户端库
    • MQTT 服务器
    • 工具和应用程序
  • 关于我们
    • 了解创科慧仁
    • 加入创科慧仁
    • 投资者关系
    • 新闻动态
    • 合作伙伴
    • 联系我们
  • 友情链接
    • Modbus中文网
    • 跳动符号官网
    • 物联网世界
    • RFID世界网
    • 深圳物联网协会
    • isoftstone软通动力
    • 中国发展战略学研究会
    • B.P商业伙伴
  • 在线客服
  • 全国客户服务热线
    4006909885
  • 官方公众号
  • 联系邮箱
    contact@mqtt.cn
Copyright © 2025 MQTT中文站. All rights reserved.Designed by nicetheme. 京ICP备20029519号
在线客服

微信咨询

微信咨询

4006909885

服务热线 7*24小时

电话咨询
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
string(5) "2.0.0"