JSON 环境变量被视为字符串

JSON environnement variable is seen as a string

我正在尝试帮助一位朋友了解他的 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**"}}

我运行一些测试的时候,NodeMailerreturn出现如下错误

 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' in nodemailer.createTransport(param) .

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

不知何故,我知道错误从何而来,但我想知道为什么我朋友设置的环境变量不是字符串而我的是字符串?我应该如何设置我的变量才能 运行 他的代码而不修改它?

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

除了简单的值,最好不要使用环境变量。我建议您使用带有这些变量的普通 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,如上所述)。