我正在创建一个表单,它应该允许用户输入信息,并向我发送一些建议,我应该从我的网站上为我的YouTube频道。然而,我遇到了一个问题,当我在帖子中测试内容时,console.log();
不能工作,nodemailer不会向提交表单的人发送确认电子邮件。有人能帮我一下吗?
server.js:
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var validator = require('./config/validator.js');
var mailer = require('nodemailer');
var app = express();
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')))
app.get('/', (req, res) => res.send(__dirname + '/public/index.html'));
app.get('/feedback', (req, res) => res.sendFile(__dirname + '/public/form.html'));
app.post('/form', (req, res) => {
console.log(req.body);
const formConfig = validator.getFormConfig('suggestions');
const errorFields = validator.validate(req.body, formConfig);
if(errorFields.length === 0) {
let transporter = mailer.createTransport("SMTP", {
service: 'gmail',
auth: {
user: '*email*',
pass: '*emailPassword*'
}
});
let noGenderSelected = 'You did not select your gender.';
var mailOptions = {
from: '*email from*',
to: req.body.email,
subject: 'Response Recieved',
text: `Hello ${req.body.fname} ${req.body.lname}!
We have recieved your response! Thank you for your feedback!
The data you entered was:
- First Name: ${req.body.fname}
- Last Name: ${req.body.lname}
- Email: ${req.body.email}
- Country: ${req.body.country}
- Suggestion: ${req.body.suggestion}
- Gender: ${req.body.gender ? `${req.body.gender}` : `${noGenderSelected}`}`,
html: `Hello ${req.body.fname} ${req.body.lname}!
We have recieved your response! Thank you for your feedback!
The data you entered was:
<ul>
<li>First Name: ${req.body.fname}</li>
<li>Last Name: ${req.body.lname}</li>
<li>Email: ${req.body.email}</li>
<li>Country: ${req.body.country}</li>
<li>Suggestion: ${req.body.suggestion}</li>
<li>Gender: ${req.body.gender ? `${req.body.gender}` : `${noGenderSelected}`}</li>
</ul>`
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log(error);
res.send(error);
} else {
console.log('Email sent: ' + info.response);
res.send('Email sent: ' + info.response);
}
});
}
res.json(errorFields);
});
app.listen(8080, () => console.log('Server listening on port 8080'));
GitHub存储库在这里:https://github.com/Macintoshuser2/JTG-Website/tree/form-page-mods
发布于 2018-06-14 07:23:40
console.log
不工作是一个相当可靠的指示,表明代码执行还没有达到这一点。
这表明未采用路由app.post('/form', (req, res) => {...
。
public/form.html
中表单的操作属性似乎是纪录片。在public/validate.js
中声明的validateAndSubmit
函数中使用AJAX调用来发布表单数据
可以解释这个问题的代码部分如下:
//...
let formValid = (errorFields.length === 0)
const clientOn = true;
if(clientOn) {
if(!formValid) {
markFields(errorFields);
formValid = true;
}
}
if(!formValid) {
$.ajax({
url: '/form',
type: 'POST',
data: data,
dataType: 'json',
}).done(
// ...
这里采用了if(clientOn
) true分支(用于调试?)并将formValid
设置为真。但是,只有当formValid
为false时,才会进行ajax调用。
if(!formValid)
可能是if( formValid)
或if(errorFields.length === 0)
的拼写错误
如果这确实是一个拼写错误,请考虑删除帖子-由于拼写错误导致的问题将被关闭。
发布于 2018-06-14 23:20:34
我已经知道问题出在哪里了。在客户机和服务器上的验证代码中,我得到了paper-dropdown-menu
的selectedItem
属性,它返回一个paper-item
元素,AJAX不喜欢它,JSON也不喜欢它,所以我把它改为paper-dropdown-menu
元素的selectedItemLabel
属性,现在它工作得很好。
https://stackoverflow.com/questions/50847275
复制相似问题