我有一个从中提取数据的数组。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
由于我使用的是heroku,最好用环境变量替换它,但我不知道该怎么做。
使用JSON字符串作为环境变量的方法吗?
答案 0 :(得分:43)
在这种情况下,它听起来不像是一个env var。
通常,您需要使用环境变量为应用程序提供有关其环境的信息或自定义其行为:要连接的数据库,要使用的auth令牌,要分叉的工作量,是否要缓存渲染视图等。
您的示例看起来更像是模型,因此像数据库这样的东西可能更合适。
那就是说,没有关于你的应用程序的功能或它如何使用festivals
的上下文,所以如果确实你应该使用env var,那么你有几个选项。最简单的可能只是使用空格或逗号分隔的字符串:
heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"
然后:
var festivals = process.env.FESTIVALS.split(' ');
披露:我是Heroku的Node.js平台所有者
答案 1 :(得分:3)
这可能取决于您的数据。例如,如果这些值都不包含逗号,则可以将其设置为以逗号分隔的列表,然后将其拆分为逗号(例如,使用FOO=bar,baz,quux node myapp.js
启动应用,然后在{{var foo = process.env.FOO.split(',')
中执行myapp.js
1}})。
否则,如果您的输入值可能更复杂,JSON可能是最容易使用的。
答案 2 :(得分:1)
使用JSON格式-最佳方式
LIST_VAR=["A", "B", "C"]
然后将字符串解析为json:
const list = JSON.parse(process.env.LIST_VAR);
console.log(typeof list); // object
consloe.log(list[2]); // "C"
答案 3 :(得分:0)
您的示例看起来比配置数组更像枚举。我强烈建议您使用模型进行保存。
如果您仅以上面的数组为例,并且对如何将数组存储在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(",");