我尝试使用AngularJS向ExpressJS服务器发送请求:
angular.module('app').controller('contactCtrl', function($scope, $http) {
$scope.envoyer = function(nom, organisation, courriel, telephone, message){
$http.post('/contact', {nom:nom, organisation:organisation, courriel:courriel, telephone:telephone, message:message}).then(function(error, response){
if(response.data.success){
console.log('sent!');
}
});
}
});
这是服务器的代码:
var mailer = require('nodemailer');
var EMAIL_ACCOUNT_EMAIL = 'aaa@gmail.com';
var EMAIL_ACCOUNT_PASSWORD = 'aaa';
var smtpTransport = mailer.createTransport({
service: "Gmail",
auth: {
user: EMAIL_ACCOUNT_EMAIL,
pass: EMAIL_ACCOUNT_PASSWORD
}
});
app.post('/contact', function(req, res, next){
var success = true;
var mailOptions = {
to: 'azez@email.com',
subject: 'qsdxwccvfd',
html: 'sqdqsdq'
};
smtpTransport.sendMail(mailOptions, function(error, res){
if(error){
console.log('[ERROR] Message NOT sent: ', error);
success = false;
} else {
console.log('[INFO] Message sent: ' + res.message);
}
next(error, success);
});
});
服务器执行请求后,我在客户端收到此错误消息:
POST http://localhost:3002/contact 404 (Not Found) angular.js:8495
(anonymous function) angular.js:8495
sendReq angular.js:8291
$http.serverRequest angular.js:8025
wrappedCallback angular.js:11498
wrappedCallback angular.js:11498
(anonymous function) angular.js:11584
Scope.$eval angular.js:12608
Scope.$digest angular.js:12420
Scope.$apply angular.js:12712
(anonymous function) angular.js:18980
jQuery.event.dispatch jquery.js:4409
elemData.handle
我认为它来自AngularJS代码的第四行,但我无法找到解决方法。我该怎么办呢?
答案 0 :(得分:2)
为了向浏览器发送成功的响应,中间件末尾的next
调用应替换为以下内容:
res.set('Content-Type', 'application/json'); // tell Angular that this is JSON
res.send(JSON.stringify({success: success}));
这些行告诉express返回标记为成功的响应,其中一个主体是JSON格式,其对象只有"成功"属性。
但是,为了实现此功能,您需要重命名您在smtpTransport.sendMail
回调中使用的参数,因为您调用了res
,因此它当前隐藏了res
来自中间件的对象。因此,将该函数的标题更改为以下内容:
smtpTransport.sendMail(mailOptions, function(error, mailRes){
...当然,您必须更改后面的日志行才能使用mailRes
而不是res
。
答案 1 :(得分:0)
亲爱的工作。您已将相同的名称指定为smtpTransport响应“res”,只需更改它即可。它会工作正常。对于snnipet,请参考下面给出的例子。
app.post('/contact', function (req, res, next) {
var success = true;
var mailOptions = {
to: 'deepak.m.shrma@email.com',
subject: 'hey',
html: 'hello'
};
smtpTransport.sendMail(mailOptions, function (error, result) {
if (error) {
console.log('[ERROR] Message NOT sent: ', error);
success = false;
res.send(error)
} else {
console.log('[INFO] Message sent: ' + result);
}
res.send(result)
});
});
答案 2 :(得分:0)
我对Express 4.0也有同样的问题。我通过重新安装body-parser来修复它:
npm install body-parser
然后做:
git add -A