POST请求错误 - TypeError:无法读取未定义的属性“name”

时间:2016-06-05 10:41:15

标签: javascript node.js post express nodemailer

我在使用nodemailer发送电子邮件时遇到了一些麻烦。我确信我已正确设置。通过身体解析器进入一些关于折旧代码的帖子,我尝试了他们的解决方案......我想我也做得对。

p.s这里有一个节点noob。

节点版本:4.4.5 快递版:4.13.4 Nodemailer版本:2.4.2

app.js

/*Application file */
'use strict';

var express = require('express');
var app = express(); //create the Application
var pug = require('pug'); //require pug for templates
var nodemailer = require('nodemailer');
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

//require modules
var blog = require('./routes/blog');
var pages = require('./routes/pages');
var tutorials = require('./routes/tutorials');
var home = require('./routes/home');
var contact = require('./routes/contact');
var port = 4000;

app.set('view-engine', 'pug');
app.set('views', __dirname + '/templates');

 //ROUTES//
app.use('/static', express.static(__dirname + '/public'));
app.use('/', home);
app.use('/pages', pages);
app.use('/blog', blog);
app.use('/tutorials', tutorials);
app.use('/', contact);

 //SERVERS//
//listern on port
app.listen(port, function () {
    setInterval(function () {
        console.log('server is running on port: ' + port);
    },10000)
});

contact.js

var express = require('express');
var router = express.Router();
var nodemailer = require("nodemailer");

router.get('/contact', function (req, res) {
    var path = req.path;
    res.locals.path = path;
    res.render('contact.pug');
});

router.post('/contact/send', function (res, req) {
    var transporter = nodemailer.createTransport({
        service: 'Gmail',
        auth: {
            user: 'myemail@gmail.com',
            pass: 'pass'
        }
    });

    var conName = req.body.name;
    var conEmail = req.body.email;
    var conTopic = req.body.topic;
    var conMessage = req.body.message;
    var text = 'New Mail. Name: ' + conName + ' Email: ' + conEmail + ' Topic: ' + conTopic+ ' Message: ' + conMessage;
    var html = '<p>New Mail.</p><ul><li>Name: ' + conName + '</li><li>Email: ' + conEmail + '</li><li>Topic: ' + conTopic + '</li><li>Message: ' + conMessage + '</li></ul>';

    var mailOptions = {
        from: 'No one <noone@email.com',
        to: 'myemail@gmail.com',
        subject: 'Website Submission',
        text: text,
        html: html
    };

    transporter.sendMail(mailOptions, function (error, info) {
        if(error){
            console.log(error);
            res.redirect('/');
        } else {
            console.log('Message sent: ' + info.response);
            res.redirect('/');
        }
    });
});

module.exports = router;

contact.pug

extends ./home-layout.pug
block content
    div.section
        div.container
            div.row.content-container
                div.col.s12.center.heading
                    h4 Contact
                    br
                div.row
                  form(method="post", action="contact/send").col.s12
                    div.row
                        div.input-field.col.s6.form-padding
                            input.validate(name="name", type='text')
                        div.input-field.col.s6.form-padding
                            input#last_name.validate(placeholder='Email', name="email", type='email')
                    div.row
                      div.input-field.col.s6.form-padding
                        input#input_text(placeholder='Topic',type='text', name="topic", length='10')
                    div.row
                      div.input-field.col.s12.form-padding
                        textarea#textarea1.materialize-textarea(placeholder='Message', name="message", length='120')
                    a
                        button(type="submit").waves-effect.waves-light.btn Send

2 个答案:

答案 0 :(得分:0)

我的猜测是你想要将你发布的路径设为绝对路径。

此:

form(method="post", action="contact/send").col.s12

应该是:

form(method="post", action="/contact/send").col.s12

答案 1 :(得分:0)

糟糕!

router.post('/contact/send', function (res, req)

应该是

router.post('/contact/send', function (req, res)