架构图
基本功能
本篇会介绍6项常用的子模块,并适时使用案例来介绍它们的功能以及再使用上的一些细节
inject
共通模块最常用到的子模块之一,作为输入用途,可以自行选择payload类型
创立inject节点时点击模块可以进入设定,选单中主要分为5个要素:
模块名称为inject设定名称物件属性预设为payload可以自行添加属性物件属性资料类型指定属性类型,包含常见的字串、数字、布林、json等主题指定topic名选择输入机制手动输入模式循环输入模式指定时间输入模式debug
输出模块,用来将输入结果显示在指定视窗上(通常是除错视窗),点击可以进入设定选单
设定选单主要包含:
function
使用javascript编写的函式模块,可以提供使用者自定义的功能,我们可以对传入的物件属性进行处理,透过返回msg物件,后续的模块可以得到加工后的结果
例如我编写一个用来判断result值是否为真的模块,如果成立便新增一个新的属性note,并给予它一个值
if(msg.payload.result == true){ msg.payload.note = "test"}return msg;
或者编写一个判断属性长度的模块
var new_msg = {payload:msg.payload.length}msg.payload = new_msgreturn msg;
一样点击function模块进入设定,在函数栏位编写自定义的程式码就可以了
change
改变物件属性类型,可以进行增、删、修改、转移等操作
点击模块后可以进入设定选单,change模块的重点在操作指令
switch
这是一个很有趣的模块,它类似程式中的switch语句,可以用来当作流程控制
switch(msg.payload){ case 1: /*do something*/ break; case 2: /*do something*/ break; ...}
选单中4个重点,分别对应switch的功能
其实不只常见的判断子,Node-RED提供非常多的判断模式供使用者使用,这些就留给大家慢慢摸索
template
template模块可以提供使用者自定HTML模板
模板内可以输入指定的HTML格式,举个例子来看看这个模块的功用,把以下html程式码写进template模块内
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Hello~</title> </head> <body> <h2>This is Node-RED<h2> </body></html>
在侧边拦栏位找到httpin模块,拖曳进来并起双击设定
请求方法选择http协议的GET methodURL可以自订,这里设定绝对路径/hello名称表示模块名,可有可无
在侧边栏位找到将http response模块,拖曳进来并将template尾部连上它。完成后应该会如下图所示
最后然后按下deploy键,在网址栏为输入url 127.0.0.1:1880/hello就可以看到我们设定的html内容
实际案例练习
实现目标:
输入一串json字串,将该字串转换成json物件,例如{"id":"device0","result":true}{"id":"device1","result":false}
若判断result为true,则新增一个属性note,并且定义它的内容为test字串,并输出json物件若判断result为false,则原封不动输出json物件方法一: 利用function
if(msg.payload.result == true){ msg.payload.note = "test"}return msg;
拉取debug模块,并且把上述模块都连接起来方法二: 利用change与switch


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