【问题标题】:How to properly handle server side errors?如何正确处理服务器端错误?
【发布时间】:2014-02-10 20:17:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: angularjs error-handling ngresource


    【解决方案1】:

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

    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-09-02
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多