现在已经坚持了好几个小时,我已经尝试过每一个我没有成功的例子。
我的投资组合中有一个简单的表单,在提交时会向我发送一封电子邮件。在这方面,它完美地运作。但是,我想要某种响应,以便我可以在页面上显示成功或错误消息,以便用户可以告诉他们的消息已经通过。
这是我的控制器代码:
$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);
}
});
});
我尝试过各种各样的回报,回调,推迟和承诺,但似乎没有任何效果。
非常感谢任何和所有帮助。
答案 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}
});
}
});