使用上下文

什么是上下文?

Node-RED 提供了一种存储信息的方式,这些信息可以在不同节点之间共享,而无需通过流传递消息。这被称为"上下文"。

上下文作用域

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

  • 节点 - 仅对设置该值的节点可见
  • 流程 - 对同一流程(或编辑器中的标签页)上的所有节点可见
  • 全局 - 对所有节点可见

任何特定值的作用域选择将取决于其使用方式。

如果一个值只需要被单个节点访问,例如Function节点,那么Node上下文就足够了。

通常情况下,上下文允许在多个节点之间共享某种状态。例如,传感器可能在一个流程中定期发布新值,而您希望创建一个单独的HTTP触发的流程来返回最新值。通过将传感器读数存储在上下文中,HTTP流程就可以获取并返回该值。

全局上下文可以通过在设置文件中使用functionGlobalContext属性预先配置值。

Note : for nodes in a subflow, the flow context is shared by those nodes and not the flow the subflow is on. From Node-RED 0.20, the nodes inside a subflow can access the context of the parent flow by prepending $parent. to the context key. For example:
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秒才将它们写入文件系统一次。
Note : Depending on when you installed Node-RED, your settings.js file may not have an example entry for contextStorage. If that is the case, you can copy the example above and add it yourself.

使用多个上下文存储

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

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

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

在这个示例中,default属性告诉Node-RED当访问上下文的请求未指定存储时应该使用哪个存储。

Note : if you choose to configure multiple localfilesystem stores, you must set their dir option so they use different directories to store data. Details on how to configure the store is available here

有关内置模块的完整详情、它们提供的配置选项以及如何创建自定义模块的信息,请参阅api页面

在流程中使用上下文

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

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

如果配置了多个上下文存储,用户界面将允许您选择将值存储在哪个存储中。

在Function节点中使用上下文

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

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

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

从文件存储中删除上下文

可以通过设置为删除的Change节点永久删除上下文。