MEAN.JS Контактная форма

Пытаюсь создать контактную форму и форму обратной связи для своего сайта. Вот мой маршрут и контроллер, которые я использую, однако мне нужно понять, что происходит с моими маршрутами и как захватить поля ввода из формы, реализующей это внутри MEAN.JS:

route.js:

app.route('/mail').get(mail.createmail);

app/controller.js:

    exports.createmail = function(req, res) {

    var mailOpts, smtpTrans;
    // create reusable transporter object using SMTP transport
    var transporter = nodemailer.createTransport({
        service: 'Gmail',
        auth: {
            user: '[email protected]',
            pass: '34Girls34*goo'
        }
    });

    // NB! No need to recreate the transporter object. You can use
    // the same transporter object for all e-mails

    // setup e-mail data with unicode symbols
    var mailOptions = {
        from: 'Fred Foo ✔ <[email protected]>', // sender address
        to: '[email protected]', // list of receivers
        subject: 'Hello ✔', // Subject line
        text: 'Hello world ✔', // plaintext body
        html: '<b>Hello world ✔</b>' // html body
    };

    // send mail with defined transport object
    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            console.log(error);
        } else {
            console.log('Message sent: ' + info.response);
        }
    });

 };

Не уверен, как это работает с HTML с представлением:

<form action="mail">...</form>

person Tyler Canton    schedule 19.04.2015    source источник
comment
@joker Я не понимаю, почему я получил отрицательную оценку с нулевым решением по этому вопросу. Посоветуйте Джокера...   -  person Tyler Canton    schedule 20.04.2015
comment
Джокер, ты очень жесток ко мне, теперь помоги мне :-( Мой код отредактирован, и мне нужно лучше понять это.   -  person Tyler Canton    schedule 21.04.2015


Ответы (2)


Если я правильно понимаю вопрос, вы спрашиваете, как вы можете собирать данные, которые вводятся в форму, отправлять эти данные в expressJS, а затем использовать эти данные для отправки исходящего электронного письма.

Если да, то вот ваш поток:

Шаг 1. Создайте форму в представлении и сопоставьте ее с контроллером AngularJS.

<form name="contactForm" data-ng-submit="sendMail()">
Name: <input type="text" data-ng-model="contact_name">
Message: <input type="text" data-ng-model="contact_msg">
<button type="submit">
</form>

Шаг 2. В контроллере AngularJS используйте запрос $http для отправки данных на ваш Express Route.

$scope.sendMail = function() {
// Simple POST request example (passing data) :
$http.post('/mail', {name: contact_name, msg: contact_msg}).
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  }).
  error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });
}

Шаг 3. Используйте маршрут ExpressJS в качестве API для вызова контроллера ExpressJS. (Похоже, вы немного прикрыли этот момент)

app.route('/mail').get(mail.createmail);

Шаг 4: Получите и сделайте что-нибудь с данными, переданными через $http POST

exports.createmail = function(req, res) {
var data = req.body;

Теперь вы можете использовать данные, как это

   var mailOptions = {
        from: data.name, // sender name
        text: data.msg, // plaintext body
    };

В MeanJS 0.4.0 также есть рабочий пример NodeMailer, который может помочь: https://github.com/meanjs/mean/tree/0.4.0

person Shrizzy    schedule 22.04.2015
comment
Мне снова нужно было лучше понять «Шаг 4», ты супер классная Шриззи. Пожалуйста, напишите или позвоните мне, когда у вас будет время. Спасибо.. - person Tyler Canton; 23.04.2015

С angularJS вы можете удалить атрибут действия и просто использовать директиву angularJS ngSubmit и вызвать функцию в вашем контроллере, которая теперь будет посещать конечную точку с помощью $http.get.

person hisabimbola    schedule 22.04.2015