NodeJS 如何在进程中存储对象,环境变量

dba5bblo  于 2023-04-29  发布在  Node.js
关注(0)|答案(3)|浏览(163)

我在node js中使用了firebase。应用程序,我想存储它的serviceAccountKey。json文件在进程中env变量。
我的dotenv里有这样的东西。env)文件

SERVICE_ACCOUNT_KEY={
  "type": "anything",
  "project_id": "anything",
  "private_key_id": "anything",
  "private_key": "anything",
  "client_email": "anything",
  "client_id": "anything",
  "auth_uri": "anything",
  "token_uri": "anything",
  "auth_provider_x509_cert_url": "anything",
  "client_x509_cert_url": "anything"
}

但当我这么做的时候,它说
服务帐户必须是对象。
请帮助我存储正在进行的对象。env变量。

u5rb5r59

u5rb5r591#

您可以尝试将对象存储为字符串,并在代码中将其解析为JSON。

  • .env*:
MY_VAR='{"a":"valueA","b":"valueB"}'

然后在代码中

  • app.js *:
let object = JSON.parse(process.env.MY_VAR);

编辑(谢谢@Luca Galasso)修改了正确的JSON字符串。

qojgxg4l

qojgxg4l2#

当在process.env中存储变量时,它将自动转换为字符串。
考虑到这一点,如果你想在process.env中设置一个变量,你可以在运行脚本时传递一个合适的字符串对象:

SERVICE_ACCOUNT_KEY='{"type":"anything"}' node script.js

或者在脚本中将对象转换为字符串。js文件类似:

process.env.SERVICE_ACCOUNT_KEY = JSON.parse(SERVICE_ACCOUNT_KEY)

在这两种情况下,当从进程中阅读变量时。env,你应该把它转换成一个对象:

SERVICE_ACCOUNT_KEY = JSON.parse(process.env.SERVICE_ACCOUNT_KEY)

因为你写的错误写着“。必须是一个对象。”,最有可能缺少的部分是最后一步(从字符串解析为对象)。

vjhs03f7

vjhs03f73#

在.env文件中:

MY_VAR='{"a":"valueA","b":"valueB"}'

在app.js文件中:

const serviceAccount = JSON.parse(process.env.MY_VAR);

而不是

const serviceAccount = require(JSON.parse(process.env.MY_VAR));

删除require和()。
样本:

相关问题