【发布时间】: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