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