Node-RED-Context-Store-API中文一览
Context Store API
0.19 中的新功能
上下文存储 API 提供了一种可插入的方式来配置上下文数据的存储位置。
默认情况下,Node-RED 使用此 API 的基于内存的实现。它还提供了一个基于文件的实现。
要创建自定义 Context Store,应创建一个实现 Store Module API 的模块。
配置
settings.js 中的属性可用于配置上下文存储contextStorage
它是具有一个或多个命名上下文存储配置的对象。
1 | contextStorage: { |
每个上下文存储配置都由两部分组成:module config
该属性标识要使用的上下文存储插件。它可以是内置模块的名称(当前为或 ),也可以是已使用加载的模块module memory localfilesystem require
1 | contextStorage: { |
该属性是传递给模块以提供自定义选项的对象 config
Store Module API
自定义插件的模块必须导出单个构造函数。当需要插件的新实例时,将调用此函数。该函数将传递给定实例的 property 值。这允许运行时拥有同一 store 插件的多个实例,每个实例都有自己的配置 config
1 | var ContextStore = function(config) { |
构造函数返回的对象必须实现所有函数 详情请见此处。
Method
0.19 中的新功能
Context Storage 插件是一个 node.js 模块,它在其上公开了一个函数,可用于创建插件的新实例。由 function 必须具有以下功能:module.exports
功能 | 描述 |
---|---|
ContextStore.open() | 打开存储以备使用 |
ContextStore.close() | 关闭存储 |
ContextStore.get(scope, key, callback) | 从 store 中获取值 |
ContextStore.set(scope, key, value, callback) | 在 store 中设置值 |
ContextStore.keys(scope, callback) | 获取 store 中所有键的列表 |
ContextStore.delete(scope) | 删除给定范围的所有键 |
ContextStore.clean(activeNodes) | 清理上下文存储 |
ContextStore.open()
打开存储以备使用。在访问任何存储值之前调用此函数。
返回 a,该 a 在存储区可供访问时解析Promise
ContextStore.close()
在运行时停止时调用,因此不会访问其他键值。
返回 resolves with the store is closed Promise
ContextStore.get(scope, key, [ callback ])
参数 | 描述 |
---|---|
scope | 键的范围 |
key | 要返回其值的 key 或 key 数组。 |
callback | 可选:使用键值调用 |
参数可以是标识单个键的 String,也可以是 Array 的字符串标识要返回值的多个键 key
如果提供了可选参数,则它必须是一个采用两个或多个参数:callback
1 | function callback(error, value1, value2, ... ) { |
如果未提供回调,并且存储支持同步访问,则该函数应返回键的单个值或值数组。如果 store 不支持同步访问,它应该会抛出一个错误 get
ContextStore.set(scope, key, value, [ callback ])
参数 | 描述 |
---|---|
scope | 键的范围 |
key | 要为其设置值的键或键数组。 |
value | 值或值数组 |
callback | 可选 设置值时要调用的回调函数 |
参数可以是标识单个键的 String,也可以是 Array 的字符串标识要设置的多个键 key
键 | 值 | 行为 |
---|---|---|
String | 任何 | 在 value key 下存储 |
Array | 数组 | 将数组的每个元素存储在相应的值下。如果元素数少于,则会将缺失值设置为 value key value key null |
Array | 非数组 | 存储为第一个键的值 - 用于任何剩余的键。value null |
如果提供了 optional 参数,则在存储值时将调用该参数。它需要一个参数,来指示在存储值时遇到的任何错误。callback error
1 | function callback(error) { |
如果未提供回调,并且 store 支持同步访问,则函数应在存储值后返回。如果 store 不支持同步访问,它应该会抛出一个错误 set
ContextStore.keys(scope, [ callback ])
参数 | 描述 |
---|---|
scope | 要返回的键的范围 |
callback | 可选:使用键列表调用的回调函数 |
获取给定范围内所有键的列表。
如果提供了可选参数,则它必须是采用两个或多个参数的函数:callback
1 | function callback(error, keys) { |
如果未提供回调,并且 store 支持同步访问,则该函数应返回 key 数组。如果 store 不支持同步访问,它应该会抛出一个错误 keys
ContextStore.delete(scope)
参数 | 描述 |
---|---|
scope | 要删除的范围 |
ContextStore.clean(activeNodes)
参数 | 描述 |
---|---|
activeNodes | 仍处于活动状态的所有节点/流 ID 的列表 |
返回一个 Promise,当 store 删除了任何不再需要的上下文范围时,该 Promise 将解析。该列表可用于确定哪些节点和流仍被视为活动状态 activeNodes
Memory Context Store
0.19 中的新功能
Memory Context 存储是 Node-RED 使用的默认存储。它将所有上下文数据保存在内存中,并在 Node-RED 重新启动时被擦除。它提供同步和异步访问。
配置
要创建内存存储,可以使用以下配置。
1 | contextStorage: { |
选项
内存存储不提供任何配置选项。
Local Filesystem Context Store
0.19 中的新功能
Local Filesystem Context store (本地文件系统上下文存储) 将上下文数据保存在本地文件中。默认情况下,它将上下文数据缓存在内存中,允许同步和异步访问。
如果关闭缓存模式,则 store 仅支持异步访问。
配置
要创建文件存储,可以使用以下配置。
1 | contextStorage: { |
选项
文件存储可以采用以下配置选项:
选项 | 描述 |
---|---|
dir |
用于存储目录的目录。默认:用户目录,base ~/.node-red |
base |
存储上下文数据的基目录。默认值: "context" |
cache |
是否在内存中缓存上下文。默认值:true |
flushInterval |
如果启用了缓存,则为写入存储之间的最小间隔(以秒为单位)。默认值:30 |
上下文存储的默认配置是使用 directory,并启用缓存,并且每 30 秒写入一次存储。file ~/.node-red/context
提供是为了最大限度地减少对底层存储的磨损,例如就像在 Raspberry Pi 的 SD 卡上一样。请注意,如果 Node-RED 意外终止,则任何尚未刷新的数据都将丢失 flushInterval
实现细节
此上下文存储为每个上下文范围使用单独的文件。顶层是每个流范围的目录和一个全局范围的目录。每个流范围目录中都有一个包含流范围的文件,以及每个节点上下文的文件。flow.json
1 | $HOME/.node-red/context |