所以有可能得到更多的选票,这里是我的问题(很好!):我花了数小时试图弄清楚如何让Heroku接受我刚添加的ENV变量(heroku config:设置PASS_CODE ='密码')。未在Heroku中发送HTML表单数据。 ENV变量问题
我在Express应用程序中有一个简单的HTML联系表单,我使用npm包nodemailer,在.env文件中添加ENV变量以与detenv一起使用,并使用下面的代码调用它们。 Heroku的状态是以相同的方式调用它们的ENV变量,但是表单数据没有发送,而且我仍然在Heroku日志中发现以下错误:{Error:Invalid login:535 5.0.0 Authentication Failed。 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) {
\t res.render('contact');
});
router.post('/send', function(req, res, next){
\t // create reusable transporter object using the default SMTP transport
\t var transporter = nodemailer.createTransport({
\t host: 'smtp-mail.outlook.com',
\t port: 587,
\t secure: false, // secure:true for port 465, secure:false for port 587
\t tls: {
\t \t ciphers: 'SSLv3'
\t },
\t auth: {
\t user: 'example.outlook.com',
\t pass: process.env.PASS_CODE
\t }
\t });
\t // setup email data with unicode symbols
\t var mailOptions = {
\t from: '"Fred Foo " <[email protected]>', // sender address
\t to: 'example.outlook.com', // list of receivers
\t subject: ' New message from your website!', // Subject line
\t 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
\t 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
\t };
\t // send mail with defined transport object
\t transporter.sendMail(mailOptions, function(error, info) {
\t if (error) {
\t console.log(error);
\t res.redirect('/');
\t } else {
\t \t console.log('Message sent: ' + info.response);
\t \t res.redirect('/');
\t \t
\t }
\t
\t });
});
我也宣布在.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"
}
}
非常感谢!