AngularJs $资源保存抛出ERR_CONTENT_LENGTH_MISMATCH

时间:2014-06-14 13:11:33

标签: node.js angularjs

使用AngularJs $资源更新现有数据。调用save on 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

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

感谢。

1 个答案:

答案 0 :(得分:0)

我想我发现了这个错误。

有些事情我没有以正确的方式处理。

我没有在mt问题中发布我的db代码,其中存在根本原因。

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

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