angularjs - 如何正确处理服务器端错误?

标签 angularjs error-handling ngresource

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

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

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

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

最佳答案

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

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

看到这个 fiddle :http://jsfiddle.net/4Buyn/对于工作样本。

关于angularjs - 如何正确处理服务器端错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254714/

相关文章:

angularjs - 您如何在指令范围内访问 ng-repeat 项的子项?

angularjs - 如何使用 ui-mention angularjs 库设置默认提及?

javascript - 获取 $watch 不是 AngularJS 中的函数错误

java - 为什么我的错误检查不起作用?

javascript - 使用 ngResource、socket.io 和 $q 维护资源集合

javascript - protactor.js 的内容是什么

java - Firebase 休息 API 过滤器查询

python - Python诅咒-以很好的方式获取错误文本

javascript - 如何获取特定 id 的 Restful 数据

javascript - AngularJS 中 REST 资源的链接(关系)