2016-06-05 1 views
0

У меня возникли проблемы с использованием nodemailer для отправки электронной почты. Я уверен, что все правильно настроено. Набившись в некоторые сообщения об обесцененном коде с парсером тела, я попробовал их решения ... Я думаю, что я сделал это правильно.Ошибка запроса POST - TypeError: Не удается прочитать свойство 'name' of undefined

p.s немного узел noob здесь.

версия Node: 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: '[email protected]', 
      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 <[email protected]', 
     to: '[email protected]', 
     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; 

контакт. мопс

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 
+0

Это линия, где вы получаете вар ошибки conName = req.body.name ;? – Dnyanesh

+0

Вы закрыли тег формы? –

+0

@Dnyanesh Это связано с этой переменной. – aleks

ответ

0

Мое предположение: вы хотите, чтобы путь, который вы отправляете, был абсолютным.

Это:

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

Должно быть:

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

Упс!

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

должен быть

router.post('/contact/send', function (req, res) 
Смежные вопросы