POST请求404(未find)与angular.js和ExpressJS

我正尝试使用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代码的第四行,但我无法find如何解决这个问题。 我该如何解决这个问题?

为了向浏览器发送成功的响应,中间件末尾的next呼叫应该被replace为这样的内容:

 res.set('Content-Type', 'application/json'); // tell Angular that this is JSON res.send(JSON.stringify({success: success})); 

这些行告诉express返回一个标记为成功的响应,其中一个JSON格式的对象只具有“成功”属性。

然而,为了这个工作,你需要重命名你在smtpTransport.sendMail的callback中使用的参数,因为你调用了这个res ,所以它现在隐藏了来自中间件的res对象。 所以把这个函数的头文件改成如下所示:

 smtpTransport.sendMail(mailOptions, function(error, mailRes){ 

…然后当然你必须改变下面的日志行来使用mailRes而不是res

我有快递4.0的同样的问题。 我通过重新安装body-parser来修复它:

 npm install body-parser 

然后做:

 git add -A 

它的工作好亲爱的。 您已经为“res”命名了smtpTransport响应,只需更改即可。 它会正常工作。 对于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) }); });