Node-RED 提供了一种存储信息的方法,这些信息可以在不同的节点之间共享,而不使用流通过的消息。这称为“上下文”。
特定上下文值的“范围”决定了它与谁共享。上下文范围有三种级别:
特定值的范围选择将取决于它的使用方式。
如果一个值只需要被单个节点访问,例如一个函数节点,那么节点上下文就足够了。
更常见的是,上下文允许某种状态在多个节点之间共享。例如,一个传感器可能定期在一个流中发布新值,而你想要创建一个单独的 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 提供了两个内置模块用于此:memory
和 localfilesystem
。还可以创建自定义存储插件以将数据保存到其他地方。
要启用基于文件的存储,可以使用以下选项:
contextStorage: {
default: {
module: "localfilesystem"
}
}
这将默认上下文存储设置为 localfilesystem
插件的实例,使用其所有默认设置。这意味着:
~/.node-red/context/
目录下的文件中存储上下文数据settings.js
文件可能没有 contextStorage
的示例条目。如果是这种情况,你可以复制上面的示例并自己添加。可以配置多个存储,以便某些值保存到本地文件系统,而某些则仅保存在内存中。
例如,要将默认存储配置为仅在内存中,而将第二个存储配置为文件系统,可以使用以下选项:
contextStorage: {
default: "memoryOnly",
memoryOnly: { module: 'memory' },
file: { module: 'localfilesystem' }
}
在此示例中,default
属性告知 Node-RED 如果访问上下文的请求不指定存储,则使用哪个存储。
有关内置模块的完整详细信息、它们提供的配置选项以及如何创建自定义模块的信息,请查看 api 页面。
在上下文中设置值的最简单方法是使用 Change 节点。例如,以下 Change 节点规则将 msg.payload
的值存储在 flow
上下文中的 myData
键下。
各种节点可以直接访问上下文。例如,Inject 节点可以配置为注入上下文值,并且 Switch 节点可以基于存储在上下文中的值路由消息。
如果你配置了多个上下文存储,用户界面将允许你选择一个值应该存储在哪个存储中。
编写函数指南 描述了如何在函数节点中使用上下文。
创建节点指南 描述了如何在自定义节点中使用上下文。
可以通过使用设置为删除的 Change 节点永久删除上下文。
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有并使用注册商标。有关 OpenJS Foundation 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS Foundation 商标列表 中列出的商标和徽标是其各自持有者的商标™或注册商标®。使用它们并不意味着与它们有任何关联或认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策