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

xfb7svmp  于 2022-12-19  发布在  Node.js
关注(0)|答案(6)|浏览(150)

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

festivals = ['bonnaroo', 'lollapalooza', 'coachella']

因为我使用的是heroku,所以用环境变量替换它可能更好,但我不确定如何做。

使用JSON字符串作为环境变量是否可行?

sxissh06

sxissh061#

在这种情况下,使用env var听起来并不合适。
通常,您希望使用环境变量为应用程序提供有关其环境的信息或自定义其行为:连接到哪个数据库、使用哪个授权令牌、分叉多少工作者、是否高速缓存所呈现的视图等。
您的示例看起来更像是一个模型,因此类似于数据库的东西可能更适合。
也就是说,你的应用做什么或如何使用festivals并没有上下文,所以如果你确实应该使用env var,那么你有几个选择,最简单的可能是使用空格或逗号分隔的字符串:

heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"

然后:

var festivals = process.env.FESTIVALS.split(' ');
  • 披露:我是Heroku* 的Node.js平台所有者
yvt65v4c

yvt65v4c2#

你的例子看起来更像一个枚举而不是配置数组。我强烈推荐使用一个模型来保存它。
如果你只是把上面的数组作为一个例子来引用,并且对数组如何存储在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']
jjhzyzn0

jjhzyzn03#

Use JSON (The Best Way 💪🎃)

定义:

ANY_LIST = ["A", "B", "C"]

解析:

const LIST = JSON.parse(process.env.ANY_LIST);

用途:

console.log(Array.isArray(LIST)); // true
consloe.log(LIST[2]); // "C"
ryoqjall

ryoqjall4#

简短回答:是的,你可以!
虽然.env变量是字符串,但您可以将其解析为数组

2种方法是:
1.JSON语法分析()

YOUR_ENV = ["A", "B", "C"] # in your .env file
const envs = JSON.parse(process.env.YOUR_ENV); // in your app file

2.拆分()

YOUR_ENV = "A, B, C"
const envs = process.env.YOUR_ENV.split(", ");
krcsximq

krcsximq5#

这可能取决于您的数据,例如,如果所有值都不包含逗号,您可以将其设为逗号分隔列表,然后在逗号处拆分(例如,以FOO=bar,baz,quux node myapp.js启动应用,然后在myapp.js中执行var foo = process.env.FOO.split(','))。
否则,如果您的输入值可能更复杂,JSON可能是最容易使用的。

jum4pzuy

jum4pzuy6#

请注意,当您需要一个长列表时,启用多行模式也很有用:

const env = require('dotenv').config({ multiline: 'line-breaks' })

https://github.com/motdotla/dotenv/commit/0a9332ff70f5121c1221d5c32839a759c60cb879
完整示例:
x一个一个一个一个x一个一个二个x

相关问题