首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当服务器上的表单数据在POST中被验证并被证明有效时,console.log()不工作,Nodemailer不发送电子邮件

当服务器上的表单数据在POST中被验证并被证明有效时,console.log()不工作,Nodemailer不发送电子邮件
EN

Stack Overflow用户
提问于 2018-06-14 06:38:30
回答 2查看 478关注 0票数 0

我正在创建一个表单,它应该允许用户输入信息,并向我发送一些建议,我应该从我的网站上为我的YouTube频道。然而,我遇到了一个问题,当我在帖子中测试内容时,console.log();不能工作,nodemailer不会向提交表单的人发送确认电子邮件。有人能帮我一下吗?

server.js:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2018-06-14 07:23:40

console.log不工作是一个相当可靠的指示,表明代码执行还没有达到这一点。

这表明未采用路由app.post('/form', (req, res) => {...

public/form.html中表单的操作属性似乎是纪录片。在public/validate.js中声明的validateAndSubmit函数中使用AJAX调用来发布表单数据

可以解释这个问题的代码部分如下:

代码语言:javascript
复制
//...

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)的拼写错误

如果这确实是一个拼写错误,请考虑删除帖子-由于拼写错误导致的问题将被关闭。

票数 0
EN

Stack Overflow用户

发布于 2018-06-14 23:20:34

我已经知道问题出在哪里了。在客户机和服务器上的验证代码中,我得到了paper-dropdown-menuselectedItem属性,它返回一个paper-item元素,AJAX不喜欢它,JSON也不喜欢它,所以我把它改为paper-dropdown-menu元素的selectedItemLabel属性,现在它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50847275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档