JSON环境变量被视为字符串

时间:2017-04-17 20:16:11

标签: json node.js environment-variables nodemailer

我正在尝试帮助朋友了解他的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()将是一个解决方案,但我宁愿不修改应用程序代码,因为我说这个配置似乎适用于我的朋友,所以我想了解哪里有区别。

1 个答案:

答案 0 :(得分: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应忽略该文件,如上所述)。