https://www.jianshu.com/p/185242483016
https://bbs.iobroker.cn/t/topic/5288
https://nodered.org/docs/getting-started/running
https://blog.csdn.net/geek_monkey/article/category/7744078
1、下载地址:https://nodejs.org/zh-cn/
下载长期版,执行正常安装node.js
安装成功后, 在新的窗口输入下面的命令检查Node.js和npm正确安装。
用管理员打开Powershell: node --version; npm --version
管理员模式使用cmd: node --version && npm–version
输出结果能看到版本号,便是安装成功
2. 安装Node-RED
将Node-RED安装为全局模块,将命令node-red添加到您的系统路径中。 在命令提示符下执行以下命令:
npm install -g --unsafe-perm node-red
3 运行Node-RED
安装完成,就可以运行Node-RED。用管理员打开Powershell:输入node-red
函数控件的输入时msg对象,输出也是msg对象。
1、日志和错误处理
要记录任何信息或报告错误,可以使用以下功能:
node.log("Log message")
node.warn("Warning")
node.error("Error")
2、context与global的应用
context.get(..) : 获取一个节点范围内的上下文属性
context.set(..) : 设置一个节点范围内的上下文属性
context.keys(..) : 返回所有节点范围上下文属性键的列表
context.flow : 同 flow
context.global : 同lobal
//使用flow的属性在不同的节点之间传递参数
flow.get(..) : 获得流作用域上下文属性
flow.set(..) : 设置流作用域上下文属性
flow.keys(..) : 返回所有流作用域上下文属性键的列表
//使用全局变量
//全局变量名为global,它与flow功能类似,但是作用域比flow大,并且,即便重新部署,global储存的值也不会丢失。以下是global的API。
global.get(..) :获取全局范围的上下文属性
global.set(..) :设置全局范围的上下文属性
global.keys(..) :返回所有全局作用域上下文属性键的列表
var count = context.get('count')||0;
//如果count不存在就初始化为0,已存在则获取count的值
count += 1;
context.set('count',count);
//执行完+1操作以后保存count的值
flow.set('flowSave',count);
//设置一个flowSave,来保存变量count的值
msg.payload = count;
return msg;
//没有使用set与get方法的另外一种写法
context.global.startTime = new Date().getTime();
//global.set('stratTime',new Date().getTime());
var timeElapsed = (currentTime - context.global.startTime)/1000;
//var stratTime = global.get('stratTime',stratTime);
//var timeElapsed = (currentTime - stratTime)/1000;
3.在函数空间中,除了可以调用JS自带的各种方法以外,含有一些node-red特有的API可以使用,我把它写在这里
node.id :函数节点的ID,在0.19版本添加
node.name :函数节点的名字,在0.19版本增加
//从log到trace都是用来向命令行输出信息的
//如果节点需要将某些内容记录到控制台,则可以使用以下功能之一:
//warn和error消息也被发送到流编辑器调试选项卡
node.log(..) : 记录一条消息
node.warn(..) : 记录一条警告消息
node.error(..) : 记录一条错误消息
node.debug(..) :记录一条调试消息
node.trace(..) : 记录跟踪消息
node.on(..) : 注册一个事件处理函数
node.status(..) : 更新节点的状态
node.send(..) : 发送消息
4.函数返回多个数据,异步发送消息
// 在以下示例中,msg1,msg2,msg3将被发送到第一输出。 msg4将被发送到第二个输出。
var msg1 = {
payload:"first out of output 1" };
var msg2 = {
payload:"second out of output 1" };
var msg3 = {
payload:"third out of output 1" };
var msg4 = {
payload:"only message from output 2" };
return [ [ msg1, msg2, msg3 ], msg4 ];
//有没有既可以发送数据,又不会结束函数的方法?当然有。我们查询了节点可以调用的API,发现有send函数,满足我们的要求。
//使用node.send()函数,异步发送消息
if (msg.topic === "apple") {
node.send([ msg, null, null]);
}
if(msg.topic === "banana"){
node.send( [ null, msg, null]);
}
if(msg.topic.indexOf("e") != -1){
node.send([null,null, msg ]);
}
5.使用状态标志
node.status(..) : 更新节点的状态
node.status({
fill:"green",shape:"dot",text:"Received "+msg.payload});
return msg;
6、如果函数返回null,则不传递任何消息,流程结束。