Node-RED 0.17 现已可供下载npm 安装

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

对于 Raspberry Pi,0.17 将不会通过标准 Raspberry Pi Jessie 仓库提供。如果您仍在使用预安装版本,请参阅Raspberry Pi 文档了解如何升级。


此版本已开发了一段时间,但它为您带来了许多有用的新功能。代码库中有超过 300 次提交,创纪录地有 20 位不同的贡献者。

TL;DR

  • 调试面板改进 - 复制消息路径/内容和更好的过滤
  • 节点端口上的工具提示标签
  • 节点帮助文本的新样式指南
  • 编辑 JSON、缓冲区和 JSONata 表达式的更好工具
  • 一个新的设置面板,汇集了编辑器的自定义功能……
  • ……包括自定义键盘快捷键
  • 通过调色板管理器更新节点
  • 拆分/合并节点的更多选项
  • HTTP In 节点中的文件上传以及其他更新
  • 支持 OAuth/OpenID 方案以保护编辑器
  • 您应该阅读下面的许多其他内容!

编辑器更新

更强大的调试面板

在上次对调试侧边栏进行改进的基础上,我们继续使其更加有用。

当您将鼠标悬停在调试消息的任何元素上时,您会看到一个迷你工具栏,它为您提供了一些操作。第一个按钮会将该消息元素的路径复制到剪贴板。例如,在上面的屏幕截图中,它将复制payload["First Name"]。然后可以将其粘贴到您可能需要引用该元素的任何位置,例如在更改节点中。

第二个按钮将复制该元素的值 - 同样,在此示例中,您将获得Fred。如果元素是对象或数组,您将获得 JSON 编码版本。

第三个按钮允许您“固定”此消息元素。当来自同一调试节点的另一条消息到达时,它将自动展开以显示所有已固定的元素。

过滤选项也已扩展。除了现有的基于您正在查看的流进行过滤的选项外,您还可以过滤视图以显示特定节点。

端口标签

现在,所有节点端口都可以显示鼠标悬停时出现的工具提示。节点可以在其定义中定义自己的标签,或者用户可以指定自定义标签。例如,Switch 节点将自动创建标签,告诉您每个输出适用什么规则。

节点编辑器有一个新的“端口标签”部分,您可以在其中为任何节点提供自己的标签。

节点信息面板

信息侧边栏已进行了常规整理,我们引入了节点帮助文本的样式指南。为节点提供的信息采用更标准的结构将使用户更容易理解如何使用任何特定节点。

如果您已发布自己的节点,我们强烈建议您更新它们以遵循样式指南。

表达式/JSON/缓冲区编辑器

我们提供的typedInput通用小部件已扩展,以支持更多类型并使其更容易使用一些现有类型。

我们添加了 Buffer 类型,因此您可以处理 node.js Buffer 对象。您可以将值输入为字节的 JSON 数组,例如[1,2,3,4],运行时会将其转换为相应的 Buffer 对象。

typedInput 的单行不适合处理长内容,例如 JSON 或更长的 JSONata 表达式。对于这些类型和新的 Buffer 类型,我们添加了将 typedInput 扩展到更大的编辑器的功能,通过单击输入右侧的按钮为您提供更多空间。

JSONata 编辑器提供了一个选项卡,用于在编辑器中测试您的表达式。您可以粘贴一个示例消息(如上所述,您现在可以直接从调试侧边栏复制),并查看表达式的结果。它还包括 JSONata 语言的完整函数参考。

当我们谈论 JSONata 时,我们还更新到最新版本 (1.2.6),它带来了许多新功能,包括$flowContext$globalContext,可用于从表达式中的上下文检索值。我们还使其不再需要使用表达式中的msg.前缀 - 因此您以前会使用msg.payload,现在应该只使用payload。现有表达式将继续有效 - 但我们建议更新它们。

Buffer 编辑器允许您输入 JSON 数组,并将在下面以十六进制显示数据。如果输入无效 JSON,它将将其视为原始 UTF-8 数据并将其转换为其 Buffer 表示。

设置面板

我们在编辑器中引入了一个新的设置面板,以汇集所有可用于自定义编辑器的选项。

您现在会在这里找到一些以前在“视图”菜单下的选项,例如网格选项。您还可以在这里找到键盘快捷键列表 - 包括根据您的喜好自定义任何快捷键的功能。请注意,这些选项存储在浏览器中 - 因此,如果您从不同的浏览器访问编辑器,它将不会保存它们。

调色板管理器更新

随着新的设置面板到位,调色板管理器视图也已移至此处。

节点视图已更新,以突出显示任何有可用更新的节点,并让您启动安装。它还警告您,您必须手动重新启动 Node-RED 才能完成更新。

节点更新

我之前提到过,我们为节点帮助添加了样式指南。大多数核心节点已更新为使用该指南。

一些节点的编辑对话框已进行了少量更新,以提高其可用性 - 特别是关于解析器节点(JSON、HTML、CSV 等)

拆分/合并

Split 节点已更新,提供更多选项,说明它应如何处理拆分不同的消息类型。例如,数组现在可以拆分为固定长度的子数组,而不是单个元素,它现在也可以处理 Buffer 有效负载。

已添加新的“流”模式,可用于重新调整消息流,以确保每条消息都是“完整”消息。例如,如果数据源发送由换行符分隔的数据包,但无法确保数据包与单个消息对齐,您可能会收到两条包含以下内容的消息

"one\ntwo\nthr" "ee\nfour\n"

请注意,包含three的数据包已拆分为两条消息。在流模式下,Split 节点能够将其转换为包含以下内容的流

"one" "two" "three" "four"

HTTP 节点

HTTP 节点已进行了一些有用的更新。

HTTP In 节点现在支持文件上传。它必须在节点中启用(默认情况下未启用)。启用后,请求中包含的任何文件都将在msg.req.files对象下提供。请注意,文件内容包含在消息中,而不是写入临时文件。

HTTP Response 节点现在允许您在节点中硬编码响应状态码和 http 标头,作为手动设置它们的一种替代方法。

HTTP Request 节点现在具有更好的 cookie 处理能力 - 使其更容易在请求上设置 cookie 并接收响应中设置的 cookie。请注意,节点会自动遵循 http 重定向,并且只返回在重定向序列中进行的最终请求中设置的 cookie。对于某些登录 API,这意味着您无法轻松访问序列中早期创建的 cookie。这是节点的一个重大限制,我们希望解决 - 但这样做将涉及对其内部进行相当大的更改。我们决定将其推迟到下一次发布,而不是急于将其纳入此版本,以便我们可以花必要的时间确保在此过程中不会出现任何问题。

最后,我们简化了 HTTP Request 节点的链接。到目前为止,这比它应该的要难。Request 节点将接收到的标头作为msg.headers发送。它还使用msg.headers设置其发出的请求的标头。这意味着给定两个 Request 节点的序列,第一个返回的标头将修改第二个发出的请求。这很少是正确的做法,并可能导致各种副作用。解决方法是显式删除节点之间的msg.headers - 这是您必须知道的事情。在此版本中,我们现在检测到一个请求节点的标头是否正在传递给另一个请求节点,并且除非它们以某种方式被故意修改,否则第二个节点现在将忽略它们。

其他节点

一如既往,对其他节点进行了一系列较小的更新。

  • Delay 节点现在将接受msg.delay来设置每条消息的延迟间隔。
  • Exec 节点现在将接受msg.kill以杀死它之前启动的进程
  • File 节点现在可以为文件的内容发送一系列消息。这些消息使用与 Split/Join 节点相同的msg.parts属性,因此可以将其馈送到 Join 节点以返回单个消息。
  • Template 可以发送已解析的 JSON 而不是原始文本。
  • TLS 配置节点现在允许在编辑器中上传所需的证书文件,而不是指向本地文件。

运行时更新

抑制捕获的错误

如果节点记录错误并提供消息对象,则可以触发流中的任何 Catch 节点。该机制已经存在一段时间了。

在大多数编程语言中,如果您捕获到一个错误,是否需要记录它由您决定。我们已使我们的行为与该方法保持一致,因此我们现在只记录未被 Catch 节点捕获的错误。

支持管理员上的替代身份验证方案

我们已将编辑器支持的身份验证机制扩展到包括Passport提供的许多机制。更具体地说,这意味着您现在可以使用 OAuth 和 OpenID 身份提供程序来保护您的编辑器。

我们已经发布了TwitterGitHub的示例,帮助您入门。

注意:我们尚未更新node-red-admin工具以支持这些身份验证方案。

节点 API 更改

context对象有一个新函数,context.keys(),它返回存储在上下文中的所有键的数组。这适用于节点自己的上下文以及流和全局上下文对象。

当部署新流时,所有节点首先停止(或closed),然后重新启动。节点可以注册的close事件处理程序现在可以接收一个布尔标志,以告知节点它是否正在被删除而不仅仅是重新启动。

现在关闭节点的调用也将在 15 秒后超时。这将防止行为不当的节点挂起整个运行时。注意:挂起被认为是节点的错误,任何此类实例都应作为节点的问题提出。15 秒的超时时间可以使用设置文件中的nodeCloseTimeout属性进行更改。