Я пытаюсь создать контактную форму для своего сайта. Я использую стек MEAN, поэтому модуль nodemailer, похоже, имеет смысл использовать.Создание формы контакта в Угловом с Nodemailer
Я создал конечную точку '/api/contact'
, на которую принимает запрос POST, и использует данные этого запроса для отправки почты.
У меня тогда есть форма в моем угловом приложении, которое на submit вызывает функцию, которая делает http.
Надеюсь, это звучит правильно. В стороне я использовал генератор углового ползунка Yeoman, поэтому мой код следит за этой структурой.
Когда приложение загружается, хотя в моей консоли я вижу код ошибки 500, а затем, когда я смотрю в журналах, я вижу ошибку при чтении свойств from
и body
в моем contact.controller.
Вот мой код:
app.js
...
var express = require('express');
---
// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);
// Start server
server.listen(config.port, config.ip, function() {
console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});
// Expose app
exports = module.exports = app;
routes.js
module.exports = function(app) {
// Insert routes below
app.use('/api/contact', require('./api/contact'));
...
./api/contact/index.js
var express = require('express');
var controller = require('./contact.controller');
var router = express.Router();
router.post('/', controller.send);
module.exports = router;
./ api/contact/contact.controller.js
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: //removed
pass: //removed
}
});
exports.send = function(req,res){
var mailOptions = {
to: //removed - my email address,
subject: 'New request on lumbajack from ',
from: req.data.from,
html: req.data.body
};
transporter.sendMail(mailOptions, function(err, info){
if (err) {
console.log(err);
}else{
console.log('Message sent: ' + info.response);
}
});
}
Тогда на стороне клиента, мой угловой контроллер
angular.module('lumbajackApp')
.controller('MainCtrl', ['$http', function ($http) {
var ctrl = this;
ctrl.emailData = {
from: '',
name: '',
body: ''
};
ctrl.postMail = function (data) {
$http.post('/api/contact', data);
};
}]);
И, наконец, мой HTML
<form ng-submit="main.postMail(main.emailData)" novalidate>
<input type="text" ng-model="main.emailData.from">
<input type="text" ng-model="main.emailData.name">
<input type="text" ng-model="main.emailData.body">
<input type="submit" value="Submit">
</form>
Сделать plunkr или jsfiddle таким образом мы можем увидеть код Runnin g – BenCr
Зачем вам нужно передавать аргументы main.postMail (main.emailData)? Не позволяет ли двунаправленная привязка данных делать значения формы доступными как переменные в области контроллера? –
Вы пытались сделать 'console.log (req.body)' в верхней части вашего 'export.send' метода?Просто видеть точные данные может дать вам представление о том, что здесь происходит. Либо данные вообще не отправляются с помощью функции 'ctrl.postMail' (проверьте, что' data' var имеет что-то в ней вообще), или var 'varata.data' имеет разные вещи там, чем вы ожидаете – RedactedProfile