我有一个数组,我从中获取数据。
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
因为我在使用heroku,所以最好使用环境变量来替换它,但我不确定如何操作。
使用JSON字符串作为环境变量是可行的方式吗?
festivals = ['bonnaroo', 'lollapalooza', 'coachella']
因为我在使用heroku,所以最好使用环境变量来替换它,但我不确定如何操作。
使用JSON字符串作为环境变量是可行的方式吗?
在这种情况下,似乎环境变量并不是最好的选择。
通常,您会使用环境变量来向应用程序提供其环境信息或自定义其行为:连接哪个数据库、使用哪些身份验证令牌、派生多少工作进程、是否缓存渲染视图等等。
您的示例看起来更像是模型,因此类似数据库之类的东西可能更合适。
尽管如此,由于没有关于您的应用程序是做什么以及如何使用“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(最佳方式)
定义:
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"
简短回答: 是的, 你可以这样做!
虽然.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(", ");
FOO=bar,baz,quux node myapp.js
启动应用程序,然后在myapp.js
中做var foo = process.env.FOO.split(',')
)。,
代替' '
。 - 5413668060const 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');
split(", ")
中逗号后面的空格。一开始我忽略了这一点,导致我的includes()
字符串匹配失败=/ - undefined