4

我正在使用 angular.js 开发网络应用程序,我目前对处理错误的正确方法有点困惑。在我的应用程序中,我使用 ngResource 来调用服务器的 rest API。所以我会有很多 ngResource api 调用。

例如用户资源,有 user.query()、user.get()、user.save() ......我想在所有的 ngResource api 调用中都放一个错误回调吗?只是为了处理各种错误:如服务器关闭或无法访问互联网??

我只是不认为在每个 ngResource api 调用中放置一个错误回调是一个好主意。那会产生大量冗余代码,使我的代码不整洁。

您将如何处理各种错误类型?

4

1 回答 1

9

您可以使用拦截器并在发生错误时做任何您想做的事情:

var app = angular.module("myApp", []);

app.config(function ($provide, $httpProvider) {
    $provide.factory('ErrorInterceptor', function ($q) {
        return {
            responseError: function(rejection) {
                console.log(rejection);
                return $q.reject(rejection);
            }
        };
    });

    $httpProvider.interceptors.push('ErrorInterceptor');
});

使用此拦截器,您可以读取状态代码并执行您需要的操作(一个完美的用例是将您的用户重定向到登录页面,如果状态代码为 401)。

由于 ngResource 使用 $http,当你调用资源方法时,你的拦截器也会被执行。

当然,您可以做更多事情并在发出请求之前/之后添加拦截器。

在此处查看完整文档:http: //docs.angularjs.org/api/ng.$http

请参阅此小提琴: http: //jsfiddle.net/4Buyn/以获取工作示例。

于 2014-01-21T16:55:38.323 回答