任何节点属性都可以通过将其值设置为形式为 ${ENV_VAR}
的字符串来使用环境变量进行设置。当运行时加载流程时,它会在将其传递给节点之前替换该环境变量的值。
这仅在替换整个属性时有效 - 不能仅用于替换值的一部分。例如,不能使用 CLIENT-${HOST}
。
由于节点提供自己的编辑对话框,并非所有属性都提供可以用于输入环境变量字符串的文本输入。在这种情况下,您可以考虑手动编辑流程文件以设置属性。
TypedInput 环境变量类型
在编辑器中,TypedInput 小部件可以提供“环境变量”作为一种类型。当选择这种类型时,其值将按如下方式进行评估:
如果没有 ${}
,则使用整个值作为环境变量的名称。
例如,"FOO"
将被替换为 process.env.FOO
的值。
如果存在 ${}
,则会将相应的环境变量替换为结果:
例如,给定值为 "Hello ${FOO}"
且环境变量 FOO
设置为 World
,这将导致值为 "Hello World"
。
可以在 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
- 节点的 IDNR_NODE_NAME
- 节点的名称NR_NODE_PATH
- 节点的路径。这表示节点在流程中的位置。它是用 /
分隔的流程、封闭子流程和节点的 ID。NR_GROUP_ID
- 包含组的 IDNR_GROUP_NAME
- 包含组的名称NR_FLOW_ID
- 节点所在流程的 IDNR_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 环境变量也将返回一个空字符串。
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有并使用注册商标。有关 OpenJS Foundation 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS Foundation 商标列表 中列出的商标和徽标是其各自持有者的商标™或注册商标®。使用它们并不意味着与它们有任何关联或认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策