angularjs POST请求404(Not Found)

0s0u357o  于 2023-04-10  发布在  Angular
关注(0)|答案(4)|浏览(266)

我尝试使用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代码的第四行,但我无法找到如何修复它。请问我如何修复它?

aydmsdu9

aydmsdu91#

为了向浏览器发送成功的响应,中间件末尾对next的调用应该替换为如下内容:

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

这几行告诉express返回一个标记为成功的响应,其主体为JSON格式,对象只有“success”属性。
然而,为了使其工作,您需要重命名在smtpTransport.sendMail的回调中使用的参数,因为您调用了res,因此它当前对中间件隐藏了res对象。因此将该函数的头部更改为如下内容:

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

...然后当然你必须更改后面的日志行,使用mailRes而不是res

rsl1atfo

rsl1atfo2#

我在express 4.0中遇到了同样的问题。我通过重新安装body-parser修复了它:

npm install body-parser

然后做:

git add -A
omqzjyyz

omqzjyyz3#

它工作正常,亲爱的。你给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)
    });
});
z4bn682m

z4bn682m4#

我也有同样的问题.即使数据库插入,并没有在我的IDE控制台错误,在那里我运行我的本地,来浏览器404.添加

res.status(200).json({ message: 'Successful' });

到控制器响应解决了我的问题。信息:PATCH在不返回Success的情况下工作正常,但POST没有。

相关问题