Node-RED处理上下文

上下文是什么?

Node-RED提供了一种存储信息的方法,可以在不同的节点之间共享数据,而不使用通过流传递的消息。这就是所谓的“context上下文”。

上下文范围

特定上下文值的“作用域”决定了它与谁共享。在那里 有三个上下文作用域级别:

  • Node -仅对设置该值的节点可见
  • Flow-对同一流(或编辑器中的选项卡)上的所有节点可见
  • Global-对所有节点可见

任何特定值的作用域的选择将取决于如何使用它。

如果一个值只需要由单个节点(如Function节点)访问,则 Node 节点上下文就足够了。

更常见的情况是,上下文允许在多个节点之间共享某种状态。 例如,传感器可能会在一个流中定期发布新值 创建一个单独的HTTP触发流来返回最近的值。通过 将传感器读数存储在上下文中,然后HTTP流就可以返回它。

全局上下文可以使用 functionGlobalContext 预配置值 属性。

注意:对于子流中的节点, flow 上下文由这些节点共享,而不是由子流所在的流共享。 从Node-RED 0.20开始,子流中的节点可以通过附加 $parent. ,来访问父流的上下文。例如:

var colour = flow.get("$parent.colour");

上下文存储

默认情况下,上下文仅存储在内存中。这意味着它的内容被清除 当Node-RED重启时。在0.19版本中,可以配置 Node-RED保存上下文数据,以便在重启时可用。

settings.js 中的 contextStorage 属性可以用来配置上下文如何 存储数据。

Node-RED提供了两个内置模块: memorylocalfilesystem 。 还可以创建自定义存储插件来将数据保存在其他地方。

将上下文数据保存到文件系统

要启用基于文件的存储,可以使用以下选项:

contextStorage: {
   default: {
       module: "localfilesystem"
   }
}

这将默认上下文存储设置为 localfilesystem 的实例。 插件,其所有默认设置。这意味着:

  • 它将把上下文数据存储在 ~/.node-red/context/下的文件中。
  • 它将值缓存在内存中,只将它们写入文件系统 每30秒一次。

注意:根据你安装Node-RED的时间, 您的 settings.js 文件可能没有 contextStorage 的示例条目。 如果是这种情况,您可以复制上面的示例并自己添加它。

使用多个上下文存储

可以配置多个存储,以便将某些值保存到 本地文件系统和一些只保存在内存中。

例如,将默认存储配置为仅在内存中,以及第二个 存储为文件系统,可使用以下选项:

contextStorage: {
   default: "memoryOnly",
   memoryOnly: { module: 'memory' },
   file: { module: 'localfilesystem' }
}

在这个例子中, default 属性告诉Node-RED如果a 访问上下文的请求没有指定存储。

注意:如果选择配置多个 localfilesystem 存储,必须设置它们的 dir 选项,以便它们使用不同的目录来存储数据。详细介绍如何配置 商店在这里

内置模块的详细信息、它们提供的配置选项和 如何创建自定义模块,可以在API页面上找到。

在流中使用上下文

在上下文中设置值的最简单方法是使用Change节点。例如, 下面的Change节点规则将把 msg.payload 的值存储在 flow 上下文中 在 myData 键下。

image

各种节点可以直接访问上下文。例如,可以配置Inject节点 注入上下文值,Switch节点可以根据该值路由消息 存储在上下文中。

如果您配置了多个上下文存储,UI将允许您进行选择 值应该存储在哪个存储区。

image

在Function节点中使用上下文

编写函数指南中描述了 如何在Function节点中使用上下文。

在自定义节点中使用上下文

创建节点指南描述了如何在自定义节点中使用上下文。

从文件存储中删除上下文

通过使用要删除的Change节点集,可以永久删除上下文。

image

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据