问题 Angular Restangular 保存和更新操作

Issues Angular Restangular save and update operations

我决定将我的项目放在 Restangular 中,但我在 SAVE 和 UPDATE 操作中遇到了一些问题。

我将 API 与 mongodb 一起使用。

在我的例子中,在保存中,我正在保存一个新的 Post,当我偶然做出任何更改时,它会保存一个新的 post 而不是更新它。

UPDATE on,我可以更新第一个实例,例如,更改标题并保存,如果我再次更新它会更新.. 生成此错误:

PUT http://127.0.0.1:8080/api/portfolio/55ef4b15ef862e8f7316cbf1 412(前提条件失败) 关注我的资源和代码:

Restangular.all($scope.section).getList($scope.query).then(function(res){
    $scope.items = res;
});

我的保存:

// create new object item
$scope.item = Restangular.one($scope.section);

// save object
$scope.addItem = function(){
    $scope.item.save().then(function(){
            toast.msgToast($scope.section + ' ...item criado!');
    }, function(err){
        toast.msgToast($scope.section + ' ...ocorreu um erro ao criar o item!');
    });
};

我的更新:

$scope.updateItem = function(){
        $scope.item.save().then(function(){
            toast.msgToast($scope.section+ ' #' +$scope.item._id.$oid+ ' ....Atualizado!');
        });
    };

    $scope.loadItem = function(){
        Restangular.one($scope.section, $stateParams.id).get().then(function(item) {
            $scope.item = item;
        });
    };

在 RESTHeart 中,POST 和 PUT 是更新插入操作,即如果资源不存在则创建资源或更新资源。

这里的重点是关于_id:

  • 在 PUT 操作中,文档 ID 由 URI 给出 ​​/db/collection/id_of_document(有关 URI 格式的更多信息请参见官方文档 here
  • 在POST操作中,_id属性可以在json中指定有效载荷。如果未指定,将创建一个新文档并通过 Location 响应返回自动生成的 _id(ObjectId 类型)header.如果指定 _id,则 POST 将导致更新,前提是具有 _id 的文档已经存在。

在您的情况下,首先 POST(创建文档),您需要使用 Location 响应 header创建了 post 资源并通过 GET 操作重新加载它;进一步 POST 使用此数据(现在包含生成的 _id)将导致更新。

无论如何,当您在现有资源上执行 POST、PATCH、PUT 或 DELETE 操作时,您需要通过 If-Match请求header。您可以在官方文档的 ETag 部分找到更多信息,包括 AngularJs.

的示例

此外,github 上有一个使用 RESTHeart、AngluarJs 和 Restangular 的 Web 应用程序的完整示例:restheart-notes-example

看看 notes.js 控制器,您会在其中找到创建、更新和删除文档的所有逻辑。