我有这个代码:
dogsResource.delete({id: $stateParams.dogId},angular.noop,function(value,responseHeaders){ //Success console.log(value); console.log(responseHeaders); },function(httpResponse){ //Error console.log(httpResponse); } );
删除完成后,问题是既没有成功也没有错误被调用.我也尝试过使用一个实例(这意味着使用$delete),但它也没有用.
我尝试用其他方法测试回调,比如get
$scope.dog = dogsResource.get({id: $stateParams.dogId},res){ console.log(value); });
谢谢
UPDATE
dogResource代码
// Return the dogs resource .factory('dogsResource',['$resource',function($resource){ return $resource("http://localhost:5000/dogs/:id",{id: "@id"},{update: {method: "PUT"}}); }])
更新2
我发现了错误.它在RESTful API(Node js)中.该方法没有向Angular发送任何内容,因此没有触发回调:
//DELETE - Delete a dog with specified ID exports.deleteDog = function(req,res) { console.log('DELETE' + req.params.id); Dog.findById(req.params.id,function(err,dog) { dog.remove(function(err) { if(err) return res.status(500).send(err.message); console.log('Succesfully deleted.'); res.status(200); }) }); };
用res.status(200).end()替换res.status(200)会触发回调.
谢谢大家的时间.
我建议你不要用
res.status(200).end()
实际上通常在expressJS中删除带有REST服务的对象时,常见的情况是将已删除的对象作为响应发送,因为它可能对前端获取此对象很有用(并确保它是好对象) .
所以不要使用
res.status(200).end()
使用
res.send(dog)
res.status(204).end()
204 NO CONTENT
请注意,默认情况下您不需要设置状态代码,它将为200.因此将状态代码设置为200只是无用的.
并且要完成http响应需要发送以关闭请求. end方法或send方法就是这样.将状态代码设置为响应http将永远不会向前端发送任何内容.这就是你的角度回调永远不会被解雇的原因.
因此,我建议您将标签expressjs添加到您的问题中,因为它不是AngularJS问题,而是真正的expressJS错误.