使用环境变量

设置节点属性

任何节点属性都可以通过将其值设置为${ENV_VAR}形式的字符串来使用环境变量进行设置。当运行时加载流时,会在将值传递给节点之前替换该环境变量的值。

这仅在替换整个属性时有效 - 不能用于仅替换值的一部分。例如,无法使用CLIENT-${HOST}

由于节点提供自己的编辑对话框,并非所有属性都会提供可用于输入环境变量字符串的文本输入框。在这种情况下,您可以考虑手动编辑流程文件来设置属性。

使用TypedInput控件

TypedInput Environment Variable

TypedInput 环境变量类型

在编辑器中,TypedInput小部件可以提供"环境变量"作为类型选项。 当选择此类型时,其值将按以下方式计算:

  • 如果不存在${},则将整个值用作环境变量的名称。 例如,"FOO"将被替换为process.env.FOO的值

  • 如果存在${},它会将对应的环境变量替换到结果中: 例如,给定值"Hello ${FOO}"且环境变量FOO设置为World, 这将生成值"Hello World"

JSONata表达式

环境变量可以在JSONata表达式中访问,例如在Change节点中使用$env函数:

$env('ENV_VAR')

函数节点

在Function节点中,可以通过env.get函数访问环境变量:

let foo = env.get("FOO");

模板节点

Node-RED 3.0

template 节点可以使用以下语法访问环境变量:

My favourite colour is {{env.COLOUR}}.

子流程实例属性

自0.20版本起,子流程可以配置实例属性。这些属性在子流程内部显示为环境变量,并可为子流程的各个实例进行自定义设置。

例如,假设有一个提供访问不同类型记录的REST API,可以创建一个子流程来访问该API并处理响应,使用环境变量来标识应访问哪种记录类型。然后可以针对这些特定类型自定义子流程的各个实例。

流程/组级环境变量

Node-RED 2.1

可以在流程或组级别设置环境变量。这可以在流程或组的编辑对话框中的相应选项卡中完成。

全局环境变量

Node-RED 3.1

可以在编辑器内全局设置环境变量。这通过用户设置对话框完成。

访问嵌套环境变量

在子流程中访问环境变量时,Node-RED会先搜索子流程属性,然后搜索包含该子流程的父流程(父流程本身也可能是另一个子流程)。

在某些情况下,访问"父级"环境变量而不引用"本地"值会很有用。这可以通过在变量名前添加$parent.前缀来实现。

作为服务运行

当Node-RED作为服务运行时(通过提供的脚本安装),它将无法访问仅在调用进程中定义的环境变量。在这种情况下,可以通过在设置文件中添加以下内容来定义环境变量:

process.env.FOO='World';

放置在 module.exports 部分之外。或者,可以通过放置以下形式的语句将变量定义为 systemd 服务的一部分

ENV_VAR='foobar'

在Node-RED用户目录~/.node-red中,一个名为environment的文件里。

内置环境变量

自 Node-RED 2.2 起

Node-RED定义了一组环境变量,用于公开有关节点、流和群组的信息。

这些信息有助于在您的工作区中"定位"节点。工作区中的节点作为流程的一部分存在。同样,一个节点可能(也可能不)属于某个分组。节点、流程和分组都会被Node-RED分配唯一的ID。

节点、流和组都支持name属性,您可以在编辑属性时进行修改。

以下环境变量可用于访问给定节点的这些信息:

  • NR_NODE_ID - 节点的ID
  • NR_NODE_NAME - 节点的名称
  • NR_NODE_PATH - 节点的路径。这表示节点在流中的位置。它是由/分隔的流ID、包含的子流和节点组成的。
  • NR_GROUP_ID - 所属群组的ID
  • NR_GROUP_NAME - 所属组的名称
  • NR_FLOW_ID - 节点所在流程的ID
  • NR_FLOW_NAME - 节点所在流程的名称
  • NR_SUBFLOW_NAME - 包含子流实例节点的名称(自Node-RED 3.1起
  • NR_SUBFLOW_ID - 所属子流程实例节点的ID (自Node-RED 3.1起)
  • NR_SUBFLOW_PATH - 包含子流实例节点的路径 (自 Node-RED 3.1 起)

请注意,虽然Node-RED生成的ID保证是唯一的,但名称并不唯一。如果某个节点、流程或组没有指定名称,对应的环境变量将为空字符串。如果某个节点不属于任何组,其组ID环境变量同样会返回空字符串。