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提供了两个内置模块: memory
和 localfilesystem
。 还可以创建自定义存储插件来将数据保存在其他地方。
将上下文数据保存到文件系统
要启用基于文件的存储,可以使用以下选项:
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
键下。
各种节点可以直接访问上下文。例如,可以配置Inject节点 注入上下文值,Switch节点可以根据该值路由消息 存储在上下文中。
如果您配置了多个上下文存储,UI将允许您进行选择 值应该存储在哪个存储区。
在Function节点中使用上下文
编写函数指南中描述了 如何在Function节点中使用上下文。
在自定义节点中使用上下文
创建节点指南描述了如何在自定义节点中使用上下文。
从文件存储中删除上下文
通过使用要删除的Change节点集,可以永久删除上下文。
有公众号之类的吗,之前这个网站打不开了
[…] 关于使用Change…
[…] 关于使用Functi…
谢谢提醒,已删 :)
还有你上边文章的图片里有一个账户名没有打…