使用环境变量

设置节点属性

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

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

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

使用 TypedInput 小部件

TypedInput 环境变量

TypedInput 环境变量类型

在编辑器中,TypedInput 小部件可以提供“环境变量”作为一种类型。当选择这种类型时,其值将按如下方式进行评估:

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

  • 如果存在 ${},则会将相应的环境变量替换为结果: 例如,给定值为 "Hello ${FOO}" 且环境变量 FOO 设置为 World,这将导致值为 "Hello World"

JSONata 表达式

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

$env('ENV_VAR')

函数节点

在函数节点内,可以使用 env.get 函数访问环境变量:

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

模板节点

Node-RED 3.0

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

我最喜欢的颜色是 {{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 部分外。或者,可以通过在 Node-RED 用户目录 ~/.node-red 中放置形式为

ENV_VAR='foobar'

的语句的文件中将变量定义为 systemd 服务的一部分。

内置环境变量

自 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 环境变量也将返回一个空字符串。