Node-RED: 入门指南
如何开始使用 Node-RED
👋 欢迎来到 Stackhero 文档!
Stackhero 提供即用型 Node-RED 云 解决方案,具有众多优势,包括:
- 包含 MQTT 服务器(Mosquitto)。
- 完全访问 Node-RED 管理界面。
- 包含 Node-RED 仪表板。
- 包含无限和专用的 SMTP 电子邮件服务器。
- 只需点击即可轻松更新。
- 使用 HTTPS 保护的可定制域名(例如,https://node-red.your-company.com)。
- 由私有和专用 VM提供的最佳性能和强大安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 Node-RED 云托管 解决方案!
如何发送电子邮件通知
每个 Stackhero 上的 Node-RED 实例都配有专用的电子邮件服务器。此服务器允许您通过简单的几次点击发送无限量的电子邮件通知。
要开始从您的 Node-RED 实例发送电子邮件,请在您的流程中添加一个 "email" 节点。您会在节点列表中看到两个电子邮件节点。选择右侧带有邮件图标的那个。添加后,该节点将自动命名为 "Stackhero integrated email server" 并预先配置。
双击电子邮件节点,并在 "To:" 字段中输入您的电子邮件地址。最好保持其他设置不变。
接下来,将一个 "inject" 节点添加到您的流程中,并将其连接到电子邮件节点。双击 inject 节点(默认名为 "timestamp"),选择 "string" 作为负载类型,并输入 "This is an email from Node-RED" 作为负载。
检查您的节点配置,部署您的流程,然后点击 inject 节点上的操作图标。然后检查您的电子邮件收件箱以查看从 Node-RED 发送的电子邮件!
提示:您可以通过在 "To:" 字段中用分号分隔每个电子邮件来向多个收件人发送电子邮件。
如何使用 Node.js 原生模块
在 Node-RED 函数中,尝试直接 require 一个 Node.js 原生模块会导致错误 ReferenceError: require is not defined。这是因为 Node-RED 不允许您在函数内部直接 require Node.js 模块。
为了解决这个问题,这些模块已集成到 Node-RED 的全局上下文中。您可以使用 context.global 访问它们。
例如,如果您需要 crypto 模块,可以这样声明:
const { crypto } = context.global;
以下 Node.js 模块可用:util、buffer、child_process、crypto、fs、os、http、http2、https 和 zlib。
连接到 MySQL 或 MariaDB 数据库
我们开发了一个节点来连接到 MySQL 服务器,该节点完全兼容 MySQL 8 的新认证系统 "Caching SHA2 Password",以及 MariaDB。
MySQL/MariaDB 节点
有关更多详细信息,请访问官方仓库。要在您的 Node-RED 实例上安装此节点,只需在 Node-RED 仪表板的管理调色板部分搜索 stackhero。
连接到 InfluxDB v2 数据库
我们提供了一个节点,用于连接到 InfluxDB v2 数据库。此节点使您能够使用 Flux 语言写入数据和执行查询。
InfluxDb-v2 节点
更多信息可在官方仓库中找到。要将其添加到您的 Node-RED 实例中,请在管理调色板部分搜索 stackhero。
如何捕获和记录 Node-RED 节点的错误
有时,节点可能会产生错误。一个实用的解决方案是设置一个 "catch all debug" 流来监控这些错误。
Node-RED 错误捕获流示例
要设置此功能,请添加一个 catch 节点并将其连接到一个 debug 节点。配置 debug 节点以输出完整的 msg 对象。此设置将每个在流程中生成的错误记录到 Node-RED 调试窗口中。
Node-RED 节点错误捕获示例
一个
catch节点仅由同一流程中的节点错误触发。如果您使用多个流程(或标签),则需要在每个流程中添加catch和debug节点。
在文件系统上存储数据
Stackhero for Node-RED 提供本地存储,您的节点可以在其中存储文件。此存储位于 /persistent/storage/ 目录中。
警告 切勿将本地存储的目标设置为
/persistent/storage/的子目录以外的其他位置。 如果您使用其他目录,当您应用 Node-RED 更新时,您将丢失数据!
节点配置以存储本地数据
在此示例中,我们将使用 node-red-node-sqlite 节点。此节点需要一个目录来存储其数据。
您需要在 /persistent/storage/ 目录中定义一个文件,例如 /persistent/storage/myDatabase.sqlite。
Node-RED 上的 SQLite 配置示例
存储文件
如果您需要本地存储数据,可以将文件写入 /persistent/storage/ 目录。某些 Node-RED 数据可能已经存在于此目录中。为避免冲突,建议使用子目录,例如 /persistent/storage/myFlowData,来存储您的文件。
要使用 Node.js 创建此目录,请在您的节点中运行以下代码:
fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });
注意 如果您计划存储多个文件,我们建议使用对象存储服务器。对象存储服务器使通过 API 管理、共享和访问文件变得更容易,例如使用 S3 协议。考虑使用 Stackhero 上可用的 MinIO 服务,它可以在短短 2 分钟内为您提供一个兼容 S3 的对象存储服务器。
使用 HTTP 节点与 iFrame
当使用 iFrame 通过 HTTP 节点请求内容时,默认头 X-Frame-Options: SAMEORIGIN 可能会阻止页面显示。从 Node-RED 版本 1.2.2-0 开始,您可以覆盖此默认头。
为此,请在您的 HTTP 响应节点上将头 X-Frame-Options 设置为 null。例如:
msg.headers = { "X-Frame-Options": null };
设置 X-Frame-Options 头的节点示例
您可以下载此流示例并将其导入到您的 Node-RED 实例中以测试此功能。
请注意,您还可以使用头 Content-Security-Policy: frame-ancestors <source> 或 X-Frame-Options: ALLOW-FROM <source> 限制允许的域。
安全模式:解决 Node-RED 流错误(502 错误)
如果您在访问管理仪表板时遇到 502 错误,请首先检查您的实例日志。您可以在 Stackhero 仪表板的 "Logs" 标签下找到这些日志,选择您的 Node-RED 服务后。
日志可能包含阻止 Node-RED 正确启动的错误。收集尽可能多的信息以帮助调试您的流程。
查看日志后,转到 Stackhero 仪表板中的服务配置并启用 "安全模式" 选项。在安全模式下,Node-RED 将在不自动启动您的流程的情况下重新启动。
这允许您访问管理仪表板,修复您的流程错误,并部署您的更改。一旦一切正常运行,请记得在服务配置中禁用安全模式,以便您的流程在 Node-RED 重启时自动启动。
调色板管理器中的节点版本比 NPM 上的旧
如果您尝试使用调色板管理器安装节点,但注意到版本比 NPM 上的旧,这可能意味着节点的创建者尚未在 Node-RED 网站上更新版本。
以前,节点版本会自动更新以反映在 NPM 上发布的版本。现在不再是这样。
好消息是,您可以提示 Node-RED 网站刷新版本。只需访问 https://flows.nodered.org/add/node,输入 NPM 模块名称(例如,node-red-contrib-xxx),然后点击 "Add" 按钮。完成后,返回您的 Node-RED 仪表板并打开调色板管理器。更新的版本现在应该可见并准备好安装。
处理错误 "SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c"
如果您在发送电子邮件时看到此错误,可能是因为您在电子邮件节点配置中选择了 "Use secure connection" 选项。
由于 Stackhero 电子邮件服务器和 Node-RED 服务器在同一实例上运行,它们本地通信,因此您不需要使用 TLS(SSL)加密。启用安全连接选项会导致 Node-RED 使用 TLS 与电子邮件服务器通信,从而导致关于 "wrong version number" 的 SSL 错误。
请注意,如果接收服务器支持加密,电子邮件将自动使用 TLS 加密。这已为您预先配置。