在node.js中将数组定义为环境变量

128
我有一个数组,我从中获取数据。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']

因为我在使用heroku,所以最好使用环境变量来替换它,但我不确定如何操作。

使用JSON字符串作为环境变量是可行的方式吗?

6个回答

185

在这种情况下,似乎环境变量并不是最好的选择。

通常,您会使用环境变量来向应用程序提供其环境信息或自定义其行为:连接哪个数据库、使用哪些身份验证令牌、派生多少工作进程、是否缓存渲染视图等等。

您的示例看起来更像是模型,因此类似数据库之类的东西可能更合适。

尽管如此,由于没有关于您的应用程序是做什么以及如何使用“festivals”的上下文,因此如果确实应该使用环境变量,则有几种选项可供选择。最简单的方法可能就是使用空格或逗号分隔的字符串:

heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"

那么:

var festivals = process.env.FESTIVALS.split(' ');

声明:我是Heroku的Node.js平台所有者


104

你的示例更像枚举而不是配置数组。我强烈建议使用模型来保存它。

如果你只是将上面的数组作为示例,并且更加好奇如何在env文件中存储数组 -

简短回答: 你不能这样做。

长回答: .env变量是字符串 所以像这样的东西

BOOLEAN = true

将会被视为

BOOLEAN = "true"

所以也会

FESTIVALS = ['bonnaroo', 'lollapalooza', 'coachella'] 

被视为

FESTIVALS = "['bonnaroo', 'lollapalooza', 'coachella']"

解决方案:

您可以将该数组保存为一个分隔符字符串在.env文件中。

FESTIVALS = "bonnaroo, lollapalooza, coachella"

在你的js文件中,你可以使用以下方法将其转换为数组

var festivals = process.env.FESTIVALS.split(", ");

结果将会是

['bonnaroo', 'lollapalooza', 'coachella']

请注意在split(", ")中逗号后面的空格。一开始我忽略了这一点,导致我的includes()字符串匹配失败=/ - undefined

77

使用 JSON(最佳方式)

定义:

ANY_LIST = ["A", "B", "C"]

解析:
const LIST = JSON.parse(process.env.ANY_LIST);

使用:
console.log(Array.isArray(LIST)); // prints: true
console.log(LIST[2]); // prints: "C"

21

简短回答: 是的, 你可以这样做!

虽然.env变量是字符串,你可以将它解析成数组。

2种方法可以实现:

1.JSON.parse()

YOUR_ENV = ["A", "B", "C"] # in your .env file
const envs = JSON.parse(process.env.YOUR_ENV); // in your app file

2. split()

YOUR_ENV = "A, B, C"
const envs = process.env.YOUR_ENV.split(", ");

8
这可能取决于你的数据。例如,如果没有一个值包含逗号,你可以将其作为逗号分隔列表,并在逗号上进行拆分(例如,使用FOO=bar,baz,quux node myapp.js启动应用程序,然后在myapp.js中做var foo = process.env.FOO.split(','))。
否则,如果你的输入值更加复杂,JSON 可能是最方便处理的方式。

同意使用,代替' ' - 5413668060

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接