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”并预先配置。

双击电子邮件节点,并在“收件人:”字段中输入您的电子邮件地址。最好保持其他设置不变。

接下来,将一个“inject”节点添加到您的流程中,并将其连接到电子邮件节点。双击 inject 节点(默认命名为“timestamp”),选择“string”作为负载类型,并输入“这是一封来自 Node-RED 的电子邮件”作为负载。

检查您的节点配置,部署您的流程,然后点击 inject 节点上的操作图标。然后检查您的电子邮件收件箱以查看从 Node-RED 发送的电子邮件!

提示:您可以通过在“收件人:”字段中用分号分隔每个电子邮件来向多个收件人发送电子邮件。

在 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 模块可用:utilbufferchild_processcryptofsoshttphttp2httpszlib

我们开发了一个节点来连接到 MySQL 服务器,该节点完全兼容 MySQL 8 的新认证系统“Caching SHA2 Password”,以及 MariaDB。

MySQL/MariaDB 节点MySQL/MariaDB 节点

有关更多详细信息,请访问官方仓库。要在您的 Node-RED 实例上安装此节点,只需在 Node-RED 仪表板的管理调色板部分搜索 stackhero

我们提供了一个节点,用于连接到 InfluxDB v2 数据库。此节点使您能够使用 Flux 语言写入数据和执行查询。

InfluxDb-v2 节点InfluxDb-v2 节点

更多信息可在官方仓库中找到。要将其添加到您的 Node-RED 实例中,请在管理调色板部分搜索 stackhero

有时,节点可能会产生错误。一个实用的解决方案是设置一个“catch all debug”流程来监控这些错误。

Node-RED 错误捕获流程示例Node-RED 错误捕获流程示例

要设置此流程,请添加一个 catch 节点并将其连接到一个 debug 节点。配置 debug 节点以输出完整的 msg 对象。此设置将每个在流程中生成的错误记录到 Node-RED 调试窗口。

Node-RED 节点错误捕获示例Node-RED 节点错误捕获示例

catch 节点仅由同一流程中的节点错误触发。如果您使用多个流程(或标签),则需要在每个流程中添加 catchdebug 节点。

Stackhero for Node-RED 提供本地存储,您的节点可以在其中存储文件。此存储位于 /persistent/storage/ 目录中。

警告 切勿将本地存储的目标设置为 /persistent/storage/ 的子目录以外的其他位置。 如果您使用其他目录,当您应用 Node-RED 更新时,您的数据将丢失!

在此示例中,我们将使用 node-red-node-sqlite 节点。此节点需要一个目录来存储其数据。

您需要在 /persistent/storage/ 目录中定义一个文件,例如 /persistent/storage/myDatabase.sqlite

Node-RED 上的 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 的对象存储服务器。

当使用 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 头的节点示例设置 X-Frame-Options 头的节点示例

您可以下载此流程示例并将其导入到您的 Node-RED 实例中以测试此功能。

请注意,您还可以使用 Content-Security-Policy: frame-ancestors <source>X-Frame-Options: ALLOW-FROM <source> 头来限制允许的域。

如果在访问您的管理仪表板时遇到 502 错误,请首先检查您的实例日志。您可以在 Stackhero 仪表板的“日志”选项卡中找到这些日志,选择您的 Node-RED 服务后。

日志中可能包含阻止 Node-RED 正常启动的错误。收集尽可能多的信息以帮助调试您的流程。

查看日志后,进入 Stackhero 仪表板中的服务配置并启用“安全模式”选项。在安全模式下,Node-RED 将在不自动启动您的流程的情况下重新启动。

这使您可以访问管理仪表板,修复流程错误并部署更改。一旦一切正常运行,请记得在服务配置中禁用安全模式,以便在 Node-RED 重启时自动启动您的流程。

如果您尝试使用调色板管理器安装节点,但注意到版本比 NPM 上的旧,这可能意味着节点的创建者尚未在 Node-RED 网站上更新版本。

以前,节点版本会自动更新以反映在 NPM 上发布的版本。现在不再是这样。

好消息是,您可以提示 Node-RED 网站刷新版本。只需访问 https://flows.nodered.org/add/node,输入 NPM 模块名称(例如 node-red-contrib-xxx),然后点击“Add”按钮。完成后,返回您的 Node-RED 仪表板并打开调色板管理器。更新的版本现在应该可见并准备好安装。

如果在发送电子邮件时看到此错误,可能是因为您在电子邮件节点配置中选择了“使用安全连接”选项。

由于 Stackhero 电子邮件服务器和 Node-RED 服务器在同一实例上运行,它们本地通信,因此您不需要使用 TLS(SSL)加密。启用安全连接选项会导致 Node-RED 使用 TLS 与电子邮件服务器通信,从而导致关于“错误版本号”的 SSL 错误。

请注意,如果接收服务器支持加密,电子邮件将自动使用 TLS 加密。这已为您预先配置。