angularjs PATCH方法404响应

时间:2015-08-25 15:36:25

标签: angularjs restangular

在底部工作

原始问题

在整个网络上都存在这样的问题,并且没有一个人真的能回答我。我无法使用角度来运行http PATCH操作以挽救我的生命。我实现了$ http,使用快捷方式$ http.patch并且不使用配置对象方法:PATCH。我通过添加自定义方法使用了$ resource。我已经使用他们的补丁实现了Restangular,我得到了同样的错误。我有其他帖子中建议的正确内容类型。我认为在这一点上可以说是安全的,这是我所缺少的。在尝试修补时,我通过邮递员收到相同的“404”消息。我可以PUT,GET,POST和DELETE,但不能修补。

在下面的图像中,您可以看到GET存在资源。但是当我尝试修补时,我得到404.浏览到该端点会显示该记录。哪个存储在Mongodb中。

successful GET for resource

failed PATCH on resource

以下是一些代码段:

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"
    });
});

0 个答案:

没有答案