使用环境变量

设置节点属性

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

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

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

使用 TypedInput 小部件

TypedInput Environment Variable

TypedInput 环境变量类型

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

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

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

JSONata 表达式

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

$env('ENV_VAR')

Function 节点

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

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

Template 节点

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 部分之外。或者,可以通过将以下形式的语句

ENV_VAR='foobar'

放在名为 environment 的文件中,该文件位于 Node-RED 用户目录 ~/.node-red 内,来将变量定义为 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 环境变量也将返回空字符串。