【问题标题】:AngularJS HTTP request error handlingAngularJS HTTP 请求错误处理
【发布时间】:2017-11-27 02:32:10
【问题描述】:

我见过不同的 Restful API facotires 错误处理示例,这有点令人困惑。举两个例子:

一个

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;
});

B

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),我想告诉类似“出了点问题,稍后再试”。

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。 A 和 B 都是错误的,选项 B 更糟。
  • 抱歉,我编辑了我的问题@georgeawg
  • 删除这个问题,写一个新问题,只有一个例子要修复。

标签: angularjs angularjs-http


【解决方案1】:

我会选择 A 选项,原因有两个:

  • 很明显发生了错误。
  • 您可以根据它们出现的页面个性化这些错误(您可能会根据用户所在的页面或组件以不同的方式处理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;
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多