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

Posted

技术标签:

【中文标题】如何正确处理服务器端错误?【英文标题】: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 调用中放置一个错误回调是一个好主意。那会产生大量冗余代码,使我的代码不整洁。

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

【问题讨论】:

【参考方案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/ 以获取工作示例。

【讨论】:

谢谢,米凯尔。我认为拦截器是实现全局错误处理的方式。

以上是关于如何正确处理服务器端错误?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 服务端错误处理

drf自定义异常处理

具有服务器端处理的jquery数据表生成并捕获验证和其他错误

服务器端“JSON 输入意外结束”错误

http请求的基本介绍

服务器端集群?