gpt4 book ai didi

AngularJS ngResource 删除事件不调用回调

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:11 27 4
gpt4 key购买 nike

我有这个代码:

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}, function(value, res){
console.log(value);
});

而且它有效。我不知道为什么会这样,因为这条狗正在从数据库中删除。

谢谢

更新

dog资源代码

// 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) 替换为 res.status(200).end() 触发了回调。

谢谢大家的宝贵时间。

最佳答案

我建议你不要使用

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 永远不会向前端发送任何内容。这就是为什么您的 Angular 回调从未被触发的原因。

所以我建议您将标签 expressjs 添加到您的问题中,因为这不是 AngularJS 问题而是真正的 expressJS 错误。

关于AngularJS ngResource 删除事件不调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34531610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com