如何正确处理服务器端错误?
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/ 以获取工作示例。
【讨论】:
谢谢,米凯尔。我认为拦截器是实现全局错误处理的方式。以上是关于如何正确处理服务器端错误?的主要内容,如果未能解决你的问题,请参考以下文章