所以冒着获得更多反对票的风险,这是我的问题(很好!):我花了几个小时试图弄清楚如何让 Heroku 接受我刚刚添加的 ENV 变量(heroku config:set PASS_CODE='password ')。
我在 Express 应用程序中有一个简单的 HTML 联系表单,我正在使用 npm 包 nodemailer,在 .env 文件中添加了 ENV 变量以与 detenv 一起使用,并使用下面的代码调用它们。Heroku 确实声明以相同的方式调用他们的 ENV 变量,但是表单数据没有发送,我仍然在 Heroku 日志中收到以下错误:{ 错误:无效登录:535 5.0.0 身份验证失败。dotenv 和 heroku 都说使用 .process.env 调用 ENV 变量。它在我的本地 node.js 服务器中完美运行,但在我推送到 heroku 时却不行。
这是我的代码片段:
require('dotenv').config();
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var nodemailer = require('nodemailer');
router.get('/', function(req, res, next) {
res.render('contact');
});
router.post('/send', function(req, res, next){
// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport({
host: 'smtp-mail.outlook.com',
port: 587,
secure: false, // secure:true for port 465, secure:false for port 587
tls: {
ciphers: 'SSLv3'
},
auth: {
user: 'example.outlook.com',
pass: process.env.PASS_CODE
}
});
// setup email data with unicode symbols
var mailOptions = {
from: '"Fred Foo " <example@outlook.com>', // sender address
to: 'example.outlook.com', // list of receivers
subject: ' New message from your website!', // Subject line
text: ' You have a new message from your website with the following details: Name: ' +req.body.first_name + 'Surname: ' + req.body.last_name + 'Email: ' + req.body.email + 'Phone Number: ' + req.body.number + 'Message: ' + req.body.message, // plain text body
html: '<b> You have a new message from your website with the following details: </b><br><ul><li>First Name: ' + req.body.first_name + '</li><li>Surname: ' + req.body.last_name + '</li><li>Email: ' + req.body.email + '</li><li>Phone Number: ' + req.body.number + '</li><li>Message: ' + req.body.message + '</li></ul>' // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error);
res.redirect('/');
} else {
console.log('Message sent: ' + info.response);
res.redirect('/');
}
});
});
我还在 .env 文件中声明了 ENV 变量,如下所示:PASS_CODE=password
,您可以看到我需要 dotenv。
当我通过 node.js 服务器在本地运行时它工作正常,但当我推送到 Heroku 时却不行。我已经在 Heroku 中设置了 ENV 变量,并通过输入heroku config
.
为了完整起见,这是我的 package.json 文件的副本:
{
"name": "podeg",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"debug": "node --debug ./bin/www"
},
"dependencies": {
"body-parser": "~1.17.1",
"cookie-parser": "~1.4.3",
"debug": "~2.6.3",
"express": "~4.15.2",
"jade": "~1.11.0",
"morgan": "~1.8.1",
"multer": "^1.3.0",
"nodemailer": "^4.0.1",
"serve-favicon": "~2.4.2",
"dotenv": "^4.0.0"
},
"engines": {
"node": "7.10.0"
}
}
非常感谢!