2017-11-25 98 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; 
    } 
});