我有一个数组,我从中提取数据。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
由于我使用的是heroku,用环境变量替换它可能会更好,但我不确定如何做到这一点。
使用JSON字符串作为环境变量的方式去吗?
在这种情况下,似乎不应该使用env var。
通常,你会想要使用环境变量来给你的应用程序提供关于它的环境的信息或自定义它的行为:连接到哪个数据库,使用哪些认证令牌,有多少工作者分支,是否缓存呈现的视图,等等。
你的例子看起来更像一个模型,所以像数据库这样的东西可能更合适。
也就是说,没有上下文围绕你的应用程序做什么或如何使用festivals
,所以如果它证明你应该使用一个env变量,那么你有几个选择。最简单的可能是只使用空格或逗号分隔的字符串:
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(最好的方法💪🎃)
定义:
ANY_LIST = ["A", "B", "C"]
解析:const LIST = JSON.parse(process.env.ANY_LIST);
使用:
console.log(Array.isArray(LIST)); // true
consloe.log(LIST[2]); // "C"
简短回答:是的,你可以!
虽然.env变量是字符串,但您可以将其解析为数组
的两种方法是:
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(", ");
这可能取决于您的数据。例如,如果所有值都不包含逗号,您可以将其设置为逗号分隔的列表,然后在逗号上进行分割(例如,从FOO=bar,baz,quux node myapp.js
开始应用程序,然后在myapp.js
中执行var foo = process.env.FOO.split(',')
)。
否则,如果您的输入值可以更复杂,JSON可能是最容易使用的。
请注意,当您需要长列表时,启用多行模式也很有用:
const env = require('dotenv').config({ multiline: 'line-breaks' })
https://github.com/motdotla/dotenv/commit/0a9332ff70f5121c1221d5c32839a759c60cb879 完整的示例:
FESTIVALS="bonnaroo
lollapalooza
coachella"
const env = require('dotenv').config({ multiline: 'line-breaks' });
const festivals = env.FESTIVALS.split('n');