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

par*_*nid 25 javascript env heroku environment-variables node.js

我有一个从中提取数据的数组.

festivals = ['bonnaroo', 'lollapalooza', 'coachella']
Run Code Online (Sandbox Code Playgroud)

由于我使用的是heroku,用环境变量替换它可能更好,但我不知道该怎么做.

使用JSON字符串作为环境变量的方式去?

hun*_*tis 49

在这种情况下,它听起来不像是一个env var.

通常,您需要使用环境变量为应用程序提供有关其环境的信息或自定义其行为:要连接的数据库,要使用的auth令牌,要分叉的工作量,是否缓存渲染视图,等等

您的示例看起来更像是一个模型,因此像数据库这样的东西可能更适合.

也就是说,没有关于你的应用程序做什么或它如何使用的上下文festivals,所以如果它确实你应该使用env var,那么你有几个选项.最简单的可能只是使用空格或逗号分隔的字符串:

heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"
Run Code Online (Sandbox Code Playgroud)

然后:

var festivals = process.env.FESTIVALS.split(' ');
Run Code Online (Sandbox Code Playgroud)

披露:我是Heroku的Node.js平台所有者


小智 22

简短的回答:是的,可以!

虽然 .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
Run Code Online (Sandbox Code Playgroud)

2. 分割()

YOUR_ENV = "A, B, C"
const envs = process.env.YOUR_ENV.split(", ");
Run Code Online (Sandbox Code Playgroud)


Foa*_*oad 12

最好的方法:使用 JSON

LIST_VAR=["A", "B", "C"]
Run Code Online (Sandbox Code Playgroud)

然后将字符串解析为json:

const list = JSON.parse(process.env.LIST_VAR);
console.log(Array.isArray(list)); // true
consloe.log(list[2]); // "C"
Run Code Online (Sandbox Code Playgroud)


msc*_*dex 6

这可能取决于您的数据。例如,如果没有价值的永远不会包含逗号,你可以只让一个逗号分隔的列表,然后在一个逗号分开(例如,启动您的应用FOO=bar,baz,quux node myapp.js,然后做var foo = process.env.FOO.split(',')myapp.js)。

否则,如果您的输入值可能更复杂,则JSON可能是最易于使用的。


小智 5

您的示例看起来更多的是枚举,而不是配置数组。我强烈建议您使用模型进行保存。

如果您仅以上述阵列为例,并且对如何将阵列存储在环境文件中感到更加好奇,

简短答案: 您不能。

长答案: .env变量是字符串, 所以像

BOOLEAN = true
Run Code Online (Sandbox Code Playgroud)

将被视为

BOOLEAN = "true"
Run Code Online (Sandbox Code Playgroud)

所以会

FESTIVALS = ['bonnaroo', 'lollapalooza', 'coachella'] 
Run Code Online (Sandbox Code Playgroud)

被视为

FESTIVALS = "['bonnaroo', 'lollapalooza', 'coachella']"
Run Code Online (Sandbox Code Playgroud)

解:

您可以将数组另存为.env中的定界字符串

FESTIVALS = "bonnaroo, lollapalooza, coachella"
Run Code Online (Sandbox Code Playgroud)

在您的js文件中,您可以使用转换为数组

var festivals = process.env.FESTIVALS.split(",");
Run Code Online (Sandbox Code Playgroud)