Node-RED 0.12.0 现已可供下载或通过 npm 安装

如果要升级,请阅读升级说明


更新至 Express 4.x

Express 是我们用来提供编辑器、管理 API 和 HTTP 节点的 Web 框架。从一开始我们就使用 Express 3.x,但该版本已不再维护,因此我们必须升级到最新的稳定版本 4.x。这样的大版本号提升意味着库中存在一些破坏性的 API 变更,总的来说,我们可以向 Node-RED 用户隐藏这些变更。但是,如果您将 Node-RED 嵌入到自己的应用程序中,并提供了自己的 Express 实例,那么如果版本不匹配,可能会出现问题。

我之前在邮件列表中说过,我在 Node-RED 早期做出的选择中有一个遗憾,那就是我们在 HTTP In 节点发送的消息上暴露了原始的 Express 请求和响应对象。我们希望能够可靠地将消息对象编码和解码为 JSON 格式——而目前消息中附加了这些对象,我们还无法做到这一点。因此,在此版本中,我们不推荐使用这些对象提供的任何函数。在本版本中它们仍然可以工作,但您会在日志中看到警告消息。大多数函数都有可以使用的替代方案——如果您不确定,请加入邮件列表提问。

支持 Node 4.x

随着 node.js 和 io.js 的重新统一,长期支持(LTS)版本 Node v4.2.0 得以发布。

Node-RED 核心运行时现在支持在 4.x 版本的 Node 上运行——但由于 4.x 对二进制模块的构建方式进行了重大更改,一些单独的节点可能需要一些时间才能跟上。

例如,我们的 Serial(串口)节点依赖于 serialport 模块。他们发布了一个支持 4.x 的新版本,但它需要比树莓派(Raspberry Pi)默认附带的 GCC 编译器更新的版本。因此,安装它不仅仅是运行一个 npm update 那么简单。一旦我们找出最佳的实现方法,我们会将其记录并分享出来。

配置节点

对于需要提醒的人来说,配置节点是指那些不实际出现在工作流中,但包含一些可被工作流中节点重用的共享配置的节点。例如,mqtt-broker 配置节点包含了代理(broker)的所有连接详细信息,可供多个 mqtt inmqtt out 节点使用。

到目前为止,配置节点是全局浮动的,可以被任何选项卡或子流上的任何节点使用。在此版本中,配置节点现在可以限定在特定的选项卡或子流范围内,也可以保持为全局节点。

这意味着,如果您导入了一个包含某些配置节点的子流,然后从您的面板中删除了该子流,这些配置节点也会被一并删除——它们不会像以前那样遗留在全局级别。

配置节点的编辑对话框允许您在右上角选择节点的范围——如果更改范围会使其对当前使用它的节点不可用,系统会发出警告。

此配置节点侧边栏选项卡(通过下拉菜单访问)已更新,以显示当前选项卡上的配置节点以及全局配置节点。当您有未使用的配置节点时,部署警告也已更新,以帮助指示这些节点的确切位置。

状态节点

节点能够共享状态消息已经有一段时间了——例如 MQTT 节点会指示它们是否已连接。但一直缺少一种让工作流对这些消息做出反应的方法。

新的“状态”(Status)节点让您能够做到这一点。与上一版本中的“捕获”(Catch)节点概念相似,“状态”节点会在同一选项卡上的某个节点更新其状态时被触发。

因为一个选项卡上可能有多个节点有状态更新,所以“状态”节点可以被定位到选项卡上的特定节点——这使得为特定场景创建特定的工作流变得更加容易。由于这个定位功能非常有用,我们已经更新了“捕获”节点,使其也能做到同样的功能。

MQTT 节点

MQTT 节点进行了一次期待已久的更新,以支持该协议的更多功能,包括:

  • keep-alive 计时器和 clean session 设置
  • TLS 连接*
  • 遗嘱(Will)和出生(Birth)消息(在连接或连接丢失时自动发布消息)。

*TLS 支持目前还只是一个最低可行的解决方案——您不能指定自己的证书,所以您可能需要暂时禁用服务器证书的验证。但我们知道,我们需要为所有基于 TLS 的连接提供一种更好的方式来管理证书。在实现这一目标之前,还有一些障碍需要克服,但可以期待未来会有进一步的改进。

节点更新

和往常一样,许多其他节点也进行了各种更新。

  • JSON 节点可以编码数组(Array)类型
  • Switch 节点的正则表达式规则现在可以设置为不区分大小写
  • HTTP In 节点可以接受非 UTF8 的有效载荷——在适当的时候将返回一个 Buffer
  • Exec 节点的配置在不同 spawn 选项下保持一致
  • Function 节点现在可以显示状态图标/文本
  • CSV 节点现在可以处理数组
  • setInterval/clearInterval 已添加到 Function 节点
  • 当 Function 节点停止时,它会自动清除所有计时器 (setInterval/setTimeout)