AngularJS ngResource删除事件不调用回调




node.js ionic (3)

我有这个代码:

dogsResource.delete({id: $stateParams.dogId}, angular.noop,
        function(value, responseHeaders){
            //Success
            console.log(value);
            console.log(responseHeaders);
        },
        function(httpResponse){
            //Error
            console.log(httpResponse);
        }
    );

删除完成 ,问题是没有成功或错误被称为。 我也试过使用一个实例(这意味着,使用$删除),但它也没有工作。

我试着用其他方法来测试回调,比如get

$scope.dog = dogsResource.get({id: $stateParams.dogId}, function(value, 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()得到了触发的回调。

谢谢你们所有的时间。


使用$resource对象的promise返回。 由于$ resource对象默认返回一个promise对象,并且该promise对象可用.$promise变量通过$resource API方法。

dogsResource.delete({id: $stateParams.dogId}).$promise.then(function(data)//Success
     console.log(value);
},
function(httpResponse){ //Error
    console.log(httpResponse);
});

在你的代码中,第二个参数是angular.noop

dogsResource.delete({id: $stateParams.dogId}, angular.noop,
        function(value, responseHeaders){
            //Success
            console.log(value);
            console.log(responseHeaders);
        },
        function(httpResponse){
            //Error
            console.log(httpResponse);
        }
    );

根据ngResource源代码 ,如果您将第二个参数设置为函数( angular.noop 一个函数),那么它将使用第二个参数作为成功回调。 由于第二个参数是无操作,因此调用它时不会发生任何事情。

尝试将第二个参数设置为function (r) { console.log (r) }并查看得到的结果。


我建议你不要使用

res.status(200).END()

实际上,通常情况下,当您使用expressJS中的REST服务删除对象时,常见的情况是将已删除的对象作为响应发送,因为前端可能会获取此对象(并确保它是良好的对象) 。

所以,而不是使用

res.status(200).END()

使用

res.send(狗)

或者如果你想发送一个空的响应,删除操作的状态码应该是:

res.status(204).END()

204无内容

请注意,您不需要设置状态码默认情况下它将是200.所以设置状态码为200是没用的。

并完成一个http响应需要发送关闭请求。 结束方法或发送方法使。 设置一个状态码到一个响应http永远不会发送任何东西到前端。 这就是为什么你的角度回调从未被解雇。

所以我建议你添加标签expressjs到你的问题,因为它不是一个AngularJS问题,而是一个真正的expressJS错误。







ionic