【问题标题】:JSON environnement variable is seen as a stringJSON 环境变量被视为字符串
【发布时间】:2017-04-17 20:16:10
【问题描述】:

我正在尝试帮助一位朋友了解他的 nodejs 应用程序。 他使用 NodeMailer 自动发送电子邮件。我们都使用 ubuntu。

为避免任何泄漏,NodeMailer 的凭据被设置为一个名为 EMAIL_CREDENTIALS 的环境变量。

在应用程序中,EMAIL_CREDENTIAL 调用如下:

 var emailCredentials = process.env.EMAIL_CREDENTIALS;
 if (emailCredentials === 'undefined') {
   throw Error('Email credentials are not present');
 }
 // create reusable transporter object using the default SMTP transport
 var transporter = nodemailer.createTransport(emailCredentials);

为了设置电子邮件凭据,我在 src/environnement 中添加了一行:

 EMAIL_CREDENTIALS={host:"smtp.gmail.com", port: 587, secure: false, auth: {user: "**user**", pass: "**pass**"}}

当我运行一些测试时,NodeMailer 返回以下错误

 Error: Unsupported configuration, downgrade Nodemailer to v0.7.1 to use it
     at Nodemailer.sendMail (/home/**path**/node_modules/nodemailer/lib/nodemailer.js:274:18)

发生此错误是因为 type of param === 'string'nodemailer.createTransport(param) 中。

我的朋友已经使用此代码很长时间了,没有任何问题。

不知何故,我明白错误来自哪里,但我想知道我的朋友设置的环境变量怎么可能不是字符串而我的是?我应该如何设置我的变量以便能够在不修改它的情况下运行他的代码?

编辑:使用 JSON.parse() 将是一个解决方案,但我不想修改应用程序代码,正如我所说,这种配置似乎对我的朋友有用,所以我想了解区别在哪里。

【问题讨论】:

  • 您如何要求src/environment?如果它告诉你它是一个字符串,暂时使用 console.log 来调试它。你可能需要 json 解析。
  • 您是否尝试过使用JSON.parse(process.env.EMAIL_CREDENTIALS) 而不是直接使用该值?我相信环境变量只是简单的字符串。
  • 当我使用 json.parse 我有unexpected character 'h' at position 1。 .......现在我想这可能是因为host应该用逗号包围。否则,关键是我不想修改代码,因为代码不是我的,应该为我的朋友工作......我会运行一些测试。
  • 嗯 JSON.parse 效果很好,但正如我之前所说的,我对这个解决方案不满意。
  • 嗯,我认为你不应该使用这样的环境变量。我将发布有关如何以其他方式进行操作的答案。

标签: json node.js environment-variables nodemailer


【解决方案1】:

最好不要将环境变量用于除简单值之外的其他值。我建议您使用带有这些变量的普通 JS 或 JSON 文件,您可以使用简单的require()。如果您不希望它包含在 git 存储库中,可以通过 .gitignore 忽略此文件。

您可以在这里查看我的配置模块:https://www.npmjs.com/package/mikro-config

它被设计为以这种方式使用。

使用它,您的一般配置将存储在/config/default.js 文件中,而您的环境特定配置将存储在/config/env/$NODE_ENV.js 文件中(或/config/env/$NODE_ENV.local.js,应该被git忽略,如上所述) .

【讨论】:

  • 感谢您的回答,我认为这是一个很好的替代解决方案。
猜你喜欢
  • 2019-06-15
  • 1970-01-01
  • 2022-08-11
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多