Node-RED学习心得(操作篇)

架构图

核心知识点

基本功能

本篇会介绍6项常用的子模块,并适时使用案例来介绍它们的功能以及再使用上的一些细节

inject

共通模块最常用到的子模块之一,作为输入用途,可以自行选择payload类型

inject模块

创立inject节点时点击模块可以进入设定,选单中主要分为5个要素:

  1. 模块名称
    • 为inject设定名称
  2. 物件属性
    • 预设为payload
    • 可以自行添加属性
  3. 物件属性资料类型
    • 指定属性类型,包含常见的字串、数字、布林、json等
  4. 主题
    • 指定topic名
  5. 选择输入机制
    • 手动输入模式
    • 循环输入模式
    • 指定时间输入模式

inject模块设定

debug

输出模块,用来将输入结果显示在指定视窗上(通常是除错视窗),点击可以进入设定选单

debug模块

设定选单主要包含:

debug模块设定

  1. 输出属性
    • 预设payload
    • 亦可指定已存在的属性
  2. 选择输出窗口
    • 选择输出视窗
  3. 模块名称
    • debug模块名称

function

使用javascript编写的函式模块,可以提供使用者自定义的功能,我们可以对传入的物件属性进行处理,透过返回msg物件,后续的模块可以得到加工后的结果

function模块

例如我编写一个用来判断result值是否为真的模块,如果成立便新增一个新的属性note,并给予它一个值

1
2
3
4
javascript=复制代码if(msg.payload.result == true){
msg.payload.note = "test"
}
return msg;

或者编写一个判断属性长度的模块

1
2
3
javascript=复制代码var new_msg = {payload:msg.payload.length}
msg.payload = new_msg
return msg;

一样点击function模块进入设定,在函数栏位编写自定义的程式码就可以了

编写function模块

change

改变物件属性类型,可以进行增、删、修改、转移等操作

change模块

点击模块后可以进入设定选单,change模块的重点在操作指令

change模块设定

  1. 模块名称
    • change模块名称
  2. 操作指令
    • 设定
      • 将属性设定为指定值
      • 也可以用来新增一个属性,并给值
    • 修改
      • 搜寻特定值然后取代
    • 删除
      • 删除物件中指定属性
    • 转移
      • 将物件中的属性值转移到另一个属性上
  3. 物件属性
    • 跟上面介绍得差不多,用来指定属性,预设是payload

switch

这是一个很有趣的模块,它类似程式中的switch语句,可以用来当作流程控制

1
2
3
4
5
6
7
8
9
10
11
c=复制代码switch(msg.payload){
case 1:
/*do something*/
break;

case 2:
/*do something*/
break;

...
}

switch模块

选单中4个重点,分别对应switch的功能

switch模块设定

  1. 属性
    • switch(var)
    • 属性栏位相当于设定var
  2. 判断类型
    • 相当于条件判断子
  3. 判断值指定值
    • 依照不同判断子填入的参数
    • case x:
    • 相当于x的功用

其实不只常见的判断子,Node-RED提供非常多的判断模式供使用者使用,这些就留给大家慢慢摸索

switch模块判断子选择

template

template模块可以提供使用者自定HTML模板

switch模块设定

模板内可以输入指定的HTML格式,举个例子来看看这个模块的功用,把以下html程式码写进template模块内

1
2
3
4
5
6
7
8
9
10
htmlembedded=复制代码<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello~</title>
</head>
<body>
<h2>This is Node-RED<h2>
</body>
</html>

在侧边拦栏位找到httpin模块,拖曳进来并起双击设定

  1. 请求方法
    • 选择http协议的GET method
    • URL可以自订,这裡设定绝对路径/hello
    • 名称表示模块名,可有可无

httpin模块设定

在侧边栏位找到将http response模块,拖曳进来并将template尾部连上它。完成后应该会如下图所示

连接模块

最后然后按下deploy键,在网址栏为输入url 127.0.0.1:1880/hello就可以看到我们设定的html内容

网页显示

实际案例练习

实现目标:

  1. 输入一串json字串,将该字串转换成json物件,例如
1
2
json=复制代码{"id":"device0","result":true}
{"id":"device1","result":false}
  1. 若判断result为true,则新增一个属性note,并且定义它的内容为test字串,并输出json物件
  2. 若判断result为false,则原封不动输出json物件

方法一: 利用function

方法一

  1. 首先加入两个inject模块,payload类型均设定为字串,字串格请参考上面json案例
  2. 在解析栏位选择json模块,双击并设定操作栏位为JSON字串与物件互转
  3. 选择function模块,然后输入以下程式码
1
2
3
4
javascript=复制代码if(msg.payload.result == true){
msg.payload.note = "test"
}
return msg;
  1. 拉取debug模块,并且把上述模块都连接起来

方法二: 利用change与switch

方法二

  1. 首先加入两个inject模块,payload类型均设定为字串,字串格请参考上面json案例
  2. 在解析栏位选择json模块,双击并设定操作栏位为JSON字串与物件互转
  3. 选择switch模块,设定payload.result的判断式

设定判断式

  1. 若result为真,则从输出端口一输出,并且连接上change模块,利用设定操作把payload.note设定成字串”test”

设定change模块

  1. 拉取debug模块,并且把上述模块都连接起来

输出结果

手动注入inject模块,经过测试可以发现右侧除错式窗成功打印我们要的结果,两种方法接测试正确

输出结果

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%