【问题标题】:How to store an object in process.env variables如何将对象存储在 process.env 变量中
【发布时间】:2022-01-24 12:04:06
【问题描述】:

我在我的节点 js 中使用 firebase。应用程序,我想将其 serviceAccountKey.json 文件存储在 process.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"
}

但是当我这样做时,它会说

服务帐号必须是一个对象。

请帮我将此对象存储在 process.env 变量中。

【问题讨论】:

    标签: node.js json object environment-variables dotenv


    【解决方案1】:

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

    .env :

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

    然后在代码中
    app.js

    let object = JSON.parse(process.env.MY_VAR);
    

    编辑(感谢@Luca Galasso)重整了正确的 JSON 字符串。

    【讨论】:

    • 现在显示“无法解析私钥”
    • 在将环境变量解析为 JSON 之前尝试检查它的内容。我将编辑我的答案,字符转义可能存在问题!
    • 给定的字符串不是 JSON 字符串有效格式。它在对象键之前缺少"。正确的字符串应该是'{"a":"valueA","b":"valueB"}'
    • @tdonnenfeld 无法解析私钥:错误:无效的 PEM 格式消息。
    • @Saad8113 我认为这是一个不同的问题。 (尝试将多行字符串存储在环境变量中?)
    【解决方案2】:

    process.env中存储变量时,会自动转换为字符串。

    鉴于此,如果您想在 process.env 中设置一个变量,您可以在运行脚本时传递一个合适的字符串对象:

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

    或者您将对象转换为 script.js 文件中的字符串,例如:

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

    在这两种情况下,从 process.env 中读取变量时,都应该将其转换为对象:

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

    由于您写的错误说“...必须是一个对象。”,很可能缺少的部分是最后一步(从字符串解析到对象)。

    【讨论】:

    • “无法解析私钥:错误:无效的 PEM 格式消息”。
    • 我首先从JSON.stringify({serviceAccountKey}) 获取值,然后将此字符串值分配给我的.env 文件中的一个变量,例如SERVICE_ACCOUNT_KEY='{whatever I got from stringify}'
    • 在读取此值时,我执行了此操作serviceAccountKey=JSON.parse(process.env.SERVICE_ACCOUNT_KEY),但出现此错误无法解析私钥:错误:无效的 PEM 格式消息。
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多