AngularJS ngResource删除不调用回调的事件

前端之家收集整理的这篇文章主要介绍了AngularJS ngResource删除不调用回调的事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码
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错误.

猜你在找的Angularjs相关文章