2017-11-25 237 views
-2

我見過Restful API facotires錯誤處理的不同示例,這有點令人困惑。下面是兩個例子:AngularJS HTTP請求錯誤處理

一個

angular.module('app').controller('userCtrl', function($scope, User) { 
    $scope.users = []; 
    $scope.error = ''; 

    User.getUsers().then(function(response) { 
     $scope.users = response.data; 
    }, function(response) { 
     $scope.error = 'Users not found'; 
    }) 
}); 

angular.module('app').factory('User', function($http) { 
    var service = {}; 

    service.getUsers = function() { 
     return $http.get('url-here').then(function(response) { 
      return response; 
     }); 
    } 

    return service; 
}); 

angular.module('app').controller('userCtrl', function($scope, User) { 
    $scope.users = []; 
    $scope.error = ''; 

    User.getUsers().then(function(response) { 
     if(response.status == 404) { 
      $scope.error = 'Users not found'; 
     } else { 
      $scope.users = response.data; 
     } 
    }); 
}); 

angular.module('app').factory('User', function($http) { 
    var service = {}; 

    service.getUsers = function() { 
     return $http.get('url-here', function(response) { 
      return response; 
     }, function(response) { 
      return response; 
     }); 
    } 

    return service; 
}); 

哪一個是最好的做法?就像,如果用戶沒有找到,我會 喜歡說沒有用戶,如果有內部服務器錯誤(500),我想告訴類似「出錯了,稍後再試」。

+1

請編輯的問題將其限制在有足夠細節的具體問題,以識別充分的答案。避免一次詢問多個不同的問題。 A和B都是erronoeus,而B選項更差。 – georgeawg

+0

對不起,我編輯了我的問題@georgeawg – Jis0

+0

只需刪除此問題,然後編寫一個只有一個要修復的示例。 – georgeawg

回答

0

我會去的選項一個,原因有二:

  • 這是明確的,一個錯誤發生。
  • 您可以根據它們出現的頁面個性化這些錯誤(根據用戶所處的頁面或組件,您可能會以不同的方式處理404錯誤)。

然後,您可以使用switch語句來服務於特定的消息,根據錯誤代碼如下所示:

User.getUsers().then(function(response) { 

    $scope.users = response.data; 

}, function(response) { // error has occured 

    switch(response.status) { 

     case "404": 
      $scope.error = "Users not found."; 
      break; 

     case "403": 
      $scope.error = "You do not have permission to view these users."; 
      break; 

     case "500": 
      $scope.error = "We are having server issues. Please try again in 10 minutes."; 
      break; 
    } 
});