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

Defining an array as an environment variable in node.js

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

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

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

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

这可能取决于您的数据。例如,如果 none 的值将永远包含逗号,您可以将其设为逗号分隔的列表,然后以逗号分隔(例如,以 FOO=bar,baz,quux node myapp.js 启动您的应用,然后执行 var foo = process.env.FOO.split(',')myapp.js).

否则,如果您的输入值可以更复杂,JSON 可能是最容易处理的。

在这种情况下,环境变量听起来并不合适。

通常,您会希望使用环境变量来为您的应用程序提供有关其环境的信息或自定义其行为:要连接到哪个数据库、要使用哪些身份验证令牌、要分叉多少个工作进程、是否分叉缓存渲染视图等

你的例子看起来更像一个模型,所以像数据库这样的东西可能更合适。

就是说,没有关于您的应用程序的功能或使用方式的上下文 festivals,因此如果您确实应该使用环境变量,那么您有多种选择。最简单的可能是只使用 space 或逗号分隔的字符串:

heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"

然后:

var festivals = process.env.FESTIVALS.split(' ');

披露:我是 HerokuNode.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"

简答:,你可以!

虽然 .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。分裂()

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