2014-06-14 31 views
0

使用AngularJs $資源更新現有數據。調用保存資源。

這是我的服務。

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 /訂閱網:: ERR_CONTENT_LENGTH_MISMATCH

我懷疑我不是執行/以正確的方式消耗資源。任何人都可以建議嗎?

謝謝。

回答

0

我想我找到了錯誤。

有些事情我沒有以正確的方式處理。

我沒有發佈我的數據庫代碼在問題的根本原因存在的問題。

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條件並調用多次導致問題的回調。