AngularJS $ http" .then"回调没有使用ExpressJS和sendgrid触发

时间:2016-11-04 13:38:19

标签: javascript angularjs node.js express sendgrid

我在角度

中有这个功能
controller: function ($scope, $http) {
  $scope.sendEMail = function (referal) {
    // console.log('referal: ', referal);

    $http({
      url: '/send-referal',
      method: "POST",
      data: referal
    }).then(function (response) {
        console.log('success', response);
      },
      function (response) { // optional
        console.log('error', response);
      });
  };
}

现在.then没有执行。

在express的服务器端,我有这样的端点:

app.post('/send-referal', function (req, res) {
  console.log('data: ', req.body);

  var html = "my html template";

  var helper = require('sendgrid').mail;
  var from_email = new helper.Email(req.body.email);
  var to_email = new helper.Email('foo@bar.com');
  var subject = 'Subject for referal form';
  var content = new helper.Content('text/html', html);
  var mail = new helper.Mail(from_email, subject, to_email, content);

  var sg = require('sendgrid')('api key here');
  var request = sg.emptyRequest({
    method: 'POST',
    path: '/v3/mail/send',
    body: mail.toJSON(),
  });

  sg.API(request, function(error, response) {
    console.log(response.statusCode);
    console.log(response.body);
    console.log(response.headers);
  });
});

这是sendgrid为您提供的正常示例。该功能正常发送电子邮件,但在客户端我根本没有得到任何回复,所以我可以告诉用户该电子邮件已发送。

如何获取$http请求以触发.then操作?

2 个答案:

答案 0 :(得分:3)

您必须使用process.env.backendUrl = 'http://localhost:8080'; export const environment = { production: false }; 从服务器发回响应,如下所示

res.json

答案 1 :(得分:1)

你的$ http电话有一些问题。一旦你修复它们,你会发现更多关于这个电话的信息,如果后端很好(看起来很好),这将解决问题。

您正在向then传递2个函数(成功和错误处理函数)。您应该将错误函数传递给catch。或者,您可以删除then和' catch`,并将这两个函数直接传递给$ http。

使用then和catch:

进行示例修复
    $http({
      url: '/send-referal',
      method: "POST",
      data: referal
    }).then(function (response) {
        console.log('success', response);
    }).catch(function (response) { // optional
        console.log('error', response);
    });

<强>更新

正如其他答案所指出的那样,你的回答是悬而未决的。我建议你按照@Aruna的答案修复服务器端。