【发布时间】:2015-10-11 16:17:25
【问题描述】:
我有一个从中提取数据的数组。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
由于我使用的是heroku,因此将其替换为环境变量可能会更好,但我不确定该怎么做。
是否可以使用 JSON 字符串作为环境变量?
【问题讨论】:
标签: javascript node.js heroku environment-variables env
我有一个从中提取数据的数组。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
由于我使用的是heroku,因此将其替换为环境变量可能会更好,但我不确定该怎么做。
是否可以使用 JSON 字符串作为环境变量?
【问题讨论】:
标签: javascript node.js heroku environment-variables env
这可能取决于您的数据。例如,如果没有任何值包含逗号,您可以将其设为逗号分隔列表,然后以逗号分隔(例如,使用 FOO=bar,baz,quux node myapp.js 启动您的应用程序,然后在 myapp.js 中执行 var foo = process.env.FOO.split(','))。
否则,如果您的输入值可能更复杂,JSON 可能是最容易使用的。
【讨论】:
,而不是' '
在这种情况下,听起来不像是 env var 是要走的路。
通常,您需要使用环境变量来为您的应用程序提供有关其环境的信息或自定义其行为:要连接到哪个数据库、要使用哪个身份验证令牌、要分叉多少工作人员、是否要缓存渲染视图等。
你的例子看起来更像一个模型,所以像数据库这样的东西可能更合适。
也就是说,没有关于您的应用程序做什么或它如何使用festivals 的上下文,所以如果您确实应该使用环境变量,那么您有多种选择。最简单的可能是只使用空格或逗号分隔的字符串:
heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"
然后:
var festivals = process.env.FESTIVALS.split(' ');
披露:我是 Heroku 的 Node.js 平台所有者
【讨论】:
您的示例看起来更像是枚举而不是配置数组。我强烈建议使用模型来保存它。
如果您只是将上述数组作为示例引用,并且对数组如何存储在 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']
【讨论】:
使用 JSON(最佳方式??)
定义:
LIST_VAR=["A", "B", "C"]
解析:
const list = JSON.parse(process.env.LIST_VAR);
使用:
console.log(Array.isArray(list)); // true
consloe.log(list[2]); // "C"
【讨论】: