我很好奇你们如何为angularJS应用程序中的所有$ resource服务调用制作默认错误处理程序?显然,如果始终保持一致,则为promise .then(success, faulure)
提供错误的函数回调是没有意义的。所以问题是:
答案 0 :(得分:0)
我更喜欢使用HTTP服务拦截器来处理我的API错误情况。设置起来非常简单。
它做什么?正如名称所示,它拦截了通过HTTP服务和资源服务的每个响应。
我的方法包括两部分。
首先是ResponseHandler
工厂:
app.factory('ResponseHandler', responseHandler);
responseHandler.$inject = ['$q', '$log'];
function responseHandler ($q, $log) {
return {
response: responseHandler,
responseError: responseErrorHandler
};
function responseHandler (response) {
$log.info('HTTP response ', response);
// success cases go through here
return response;
}
function responseErrorHandler (rejection) {
$log.error('HTTP error ', rejection);
// error cases go through here
return $q.reject(rejection);
}
}
和第二部分,HTTP提供程序中ResponseHandler
的实际“激活”:
app.config(errorInterceptor);
errorInterceptor.$inject = ['$httpProvider']
function errorInterceptor ($httpProvider) {
$httpProvider.interceptors.push('ResponseHandler');
}
我希望这个小例子能够清楚地说明如何将它集成到一个角度应用程序中。在我的例子中,我直接在responseErrorHandler
处理大部分错误案例,通过toast通知整个应用程序。
我主要依靠错误状态(例如401或403)来进行特殊操作。我不知道你是否需要更多,但我建议你“玩”状态代码和响应格式。
例如:如果表单中存在服务器端验证错误,您可能不希望在此基础级别处理此错误。所以我发送了一个特殊的验证错误,状态代码为200,它通过拦截器,然后像往常一样在.then(..)
中被捕获。