【问题标题】:AngularJs $resource save throwing ERR_CONTENT_LENGTH_MISMATCHAngularJs $resource 保存抛出 ERR_CONTENT_LENGTH_MISMATCH
【发布时间】:2014-06-17 22:42:10
【问题描述】:

使用 AngularJs $resource 更新现有数据。调用保存资源。

这是我的服务。

app.factory('SubscriptionsService', function ($resource, $q) {
    // $resource(url, [paramDefaults], [actions], options);
    var resource = $resource('/api/subscriptions');
    var factory = {};

    factory.updateSubscriptions = function (updatedSubscriptions) {
        console.log("SubscriptionsService: In updateSubscriptions. "+JSON.stringify( updatedSubscriptions));
        var deferred = $q.defer();
        resource.save(updatedSubscriptions,
            function(response){
                deferred.resolve(response);    
            },
            function(response){
                deferred.reject(response); 
            }
        );
        return deferred.promise;
    }
    return factory;
});

API 如下所示。

exports.update = function (req, res) {
    console.log("In Subscriptions API: Update invoked.");
    if (req.body == null || req.body.items == null || req.body.items == 'undefined') {
        return res.json({"status":0,"message":"no items present."});
    }
    var items = req.body.items;
    console.log("About to call update on db."+items);
    db.update(items,function(error,result,failedItems){
        if(error)
            return res.json({"status":-1,"message":error.message,"failedItem":failedItems});

        return res.json({"status":1,"message":result,"failedItem":failedItems});
    })
}

和控制器如下

$scope.confirmUpdates = function () {
        if ($scope.updatedItems.length > 0) {
            var updatedSubscriptionLevels = { "items": $scope.updatedItems };
            var promise = SubscriptionsService.updateSubscriptions(updatedSubscriptionLevels);
            promise.then(
                function(response){
                    console.log("Response received from API.");
                    var statusCode = response.status;
                    console.log("statusCode: "+statusCode);
                },
                function(message){
                    console.log("Error message: "+message);
                }
            );
        }
}

奇怪的是数据正在更新。但承诺会收到错误。

POST xxxxxx/testapi/subscriptions net::ERR_CONTENT_LENGTH_MISMATCH

我怀疑我没有以正确的方式实施/消耗资源。有人可以建议吗?

谢谢。

【问题讨论】:

    标签: node.js angularjs


    【解决方案1】:

    我想我发现了错误。

    有几件事我没有以正确的方式处理。

    我没有在根本原因所在的 mt question 中发布我的数据库代码。

    if(itemsToUpdate!=null && itemsToUpdate.length>0){
                var failedItems = []; // Holds failed items while updating.
                console.log("Items to update: "+itemsToUpdate);
                for(var index=0;index<itemsToUpdate.length;index++){
                    var item = itemsToUpdate[index];
                    console.log(item);
                    subscriptionLevels.update(
                        {_id:item._id},
                        {$set:{title:item.title,daysValid:item.daysValid,subscriptionFee:item.subscriptionFee}},
                        function(error,rowsEffected){
                            if(error){
                                console.log(error);
                                // Error occurred. Push it to failed items array.
                                failedItems.push({"title":item.title,"message":error.message});
                            }
                            else{
                                console.log("Number of rows updated: "+rowsEffected);
                            }
                        }
                    );
                }
                callback(null,"SUCCESS",failedItems);
            }
            else {
                callback(null, "NO_ITEMS", []);
            }
    

    我错过了导致问题的 if - else 条件并多次调用回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2017-04-16
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多