在开始时通过命令行在Node-Red中添加全局值上下文

问题描述

我想在命令行的红色节点期间添加信息。完美的解决方案将数据添加到全局上下文中。

现在,我可以启动node-red,但是我想添加args,例如myIP arg:

node-red -myIP 10.100.10.1

我可以修改red.js以获得args及其值,但是我走不远了。我不知道如何将参数值设置为全局上下文。

我尝试使用functionGlobalContext,但它不适用于数据,仅适用于函数。而且,我无法在命令行中修改settings.js。

是否有继续的线索?修改代码不是问题,我确实需要此功能

解决方法

您可以使用环境变量在functionGlobalContext的{​​{1}}中设置变量

例如

settings.js

然后在启动Node-RED之前导出环境变量:

 ...
 functionGlobalContext: {
    foo: process.env['MYIP']
 },...

或者如果只是一个env var,则可以内联它

 $ export MYIP="10.100.10.1"
 $ node-red

您也可以按照here的说明,直接在节点的配置中直接使用环境变量。

,

我已经看到有些人想在终端的节点红色调用期间使用args。因此,我将分享我为此所做的一切。我正在Windows上工作。

如上所述,我希望它是功能性的:

node-red -myIP 10.100.10.1

我想在一开始就在Node中获取-myIP值(10.100.10.1),以便在全局上下文中进行设置。当您想从脚本(在我的示例中为python)中启动节点红色时,这特别有用。

为此,我使用了process api from nodejs。这导致具有有关进程的信息,例如带有process.argv的命令行参数。这将返回启动该过程的命令行的每个元素的数组:

process.argv ==> ['node-red','-myIP','10.100.10.1']

因此,您可以在开始插入的节点中执行此操作,并通过该对象并检测所需的每个arg并访问下一个项目以获取值。当您拥有参数的值时,只需在全局上下文中进行设置即可,例如:

global.set('IP',item)

您将在上下文中使用命令行参数。可以与任何范围的上下文(节点,流,全局)一起使用。