在底部工作
原始问题
在整个网络上都存在这样的问题,并且没有一个人真的能回答我。我无法使用角度来运行http PATCH操作以挽救我的生命。我实现了$ http,使用快捷方式$ http.patch并且不使用配置对象方法:PATCH。我通过添加自定义方法使用了$ resource。我已经使用他们的补丁实现了Restangular,我得到了同样的错误。我有其他帖子中建议的正确内容类型。我认为在这一点上可以说是安全的,这是我所缺少的。在尝试修补时,我通过邮递员收到相同的“404”消息。我可以PUT,GET,POST和DELETE,但不能修补。
在下面的图像中,您可以看到GET存在资源。但是当我尝试修补时,我得到404.浏览到该端点会显示该记录。哪个存储在Mongodb中。
以下是一些代码段:
Resangular GET:
var corporiumRecord = Restangular.one('corporium-mgmnts', $scope.uuid);
corporiumRecord.get().then(function(res) {
console.log(res)
}, function(err) {
console.log('Restangular failed: ', err)
});
Restangular Patch:
var data = {
corporiumId: $scope.newBlock
};
var corporiumRecord = Restangular.one('corporium-mgmnts', $scope.uuid);
corporiumRecord.patch(data).then(function(res) {
console.log(res)
}, function(err) {
console.log('Restangular failed: ', err)
});
$ http尝试使用配置对象:
控制器代码:
httpCorporiumSrv.updateCorporiumId('/corporium-mgmnts/' + $scope.params.id, data)
.then(handleUpdateSuccess)
.catch(handleUpdateError);
服务代码,尝试强制使用内容类型标题,但结果相同 有没有:
function updateCorporiumId(url, data) {
return $http({
method: 'PATCH',
url: url,
data: angular.toJson(data),
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
//transformRequest: transformUpdateData
})
.then(handleUpdateSuccess)
.catch(handleUpdateErrors);
}
使用.patch快捷方式:
function updateCorporiumId(url, data) {
return $http.patch(url, data, {
transformRequest: transformUpdateData
})
.then(handleUpdateSuccess)
.catch(handleUpdateErrors);
}
事情是我已经尝试了这一切,我知道如何。我甚至不知道如何开始调试。我只是在一个确实存在的资源上获得404。关于我的请求可能发生的事情的任何建议都会很棒。
解决:
对于有此问题的任何人,如果您可以发布修复或此处发生的事情,或者PM我将会很棒,我想知道。我最终只是使用PUT来解决这个问题。
Quick Restangular解决方案:
使用Restangular.one(url,_id)为findByOne构建url模板,其中'_id'是您正在寻找的资源的id。 .get()熄灭并通过所述id找到一个资源,您可以根据需要动态填充该资源。一旦你有一个资源与GET复制它与Restangular.copy()不同于angular.copy,因为它不会将'this'绑定到新对象。更改需要在新对象中更改或添加的内容,然后对其执行.put()。
var corporiumRecord = Restangular.one('corporium-mgmnts', $scope.uuid);
corporiumRecord.get().then(function(res) {
var update = Restangular.copy(res);
// update date corporiumId
update.corporiumId = $scope.newBlock;
// submit new doc with altered value
update.put().then(function() {
console.log('updated')
});
console.log(update)
}, function(err) {
console.log('Restangular failed: ', err)
});
另外因为mongo使用_id和Restangular使用id,你必须将它添加到你的模块
angular.module('corporium-mgmnts').config(function(RestangularProvider) {
RestangularProvider.setMethodOverriders(['put', 'patch']);
// setRestangularFields is required for mongodb
RestangularProvider.setRestangularFields({
id: "_id"
});
});