如何获取Angular $ http请求以返回响应?我尝试过回调函数和承诺

时间:2015-08-13 21:21:46

标签: angularjs http

现在已经坚持了好几个小时,我已经尝试过每一个我没有成功的例子。

我的投资组合中有一个简单的表单,在提交时会向我发送一封电子邮件。在这方面,它完美地运作。但是,我想要某种响应,以便我可以在页面上显示成功或错误消息,以便用户可以告诉他们的消息已经通过。

这是我的控制器代码:

$scope.sendMail = function(name, address, message) {
    var deferred = $q.defer();
    $http({
      url: '/send',
      method: 'GET',
      params: {name: name, address: address, message: message}
    }).success(function(response) { 
      console.log('Worked!');
      deferred.resolve(response);
    }).error(function(response) {
      console.log('Did not work!');
      deferred.reject(response);
    });
    return deferred.promise;
  }

以下是我在节点server.js文件中发送请求的地方:

app.get('/send',function(req,res){
  var mailOptions={
    to : 'ClaytonAlanKinder@gmail.com',
    subject : 'Message from: ' + req.query.name + ' at ' + req.query.address,
    text : req.query.message
  }
  console.log(mailOptions);
  transporter.sendMail(mailOptions, function(error, info){
    if (error) {
      console.log(error);
    } else {
      console.log(info.response);
    }
  });
});

我尝试过各种各样的回报,回调,推迟和承诺,但似乎没有任何效果。

非常感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

您不需要var deferred = $q.defer();或任何成功和错误回调,$http已经返回承诺,您只需要使用它。

$scope.sendMail = function(name, address, message) {
  ContactService.sendMail(name, address, message).then(function(response){
    $scope.successfulSend = response;
  },function (e) {
    console.warn('An error has occurred.', e);
  });
}
.service('ContactService', function($http, $q) {
  this.sendMail = function(name, address, message) {
    return $http({
      url: '/send',
      method: 'GET',
      params: {name: name, address: address, message: message}
    });
  }
});