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-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 仪表板的 "Logs" 标签下找到这些日志,选择您的 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 仪表板并打开调色板管理器。更新的版本现在应该可见并准备好安装。

如果您在发送电子邮件时看到此错误,可能是因为您在电子邮件节点配置中选择了 "Use secure connection" 选项。

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

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