angular js中的默认错误处理程序

Default error handler in angular js

本文关键字:错误 处理 程序 默认 js angular      更新时间:2023-09-26

我很好奇你们是如何为angularJS应用程序中的所有$resource服务调用创建默认错误处理程序的?显然,如果promise .then(success, faulure)总是相同,那么一直为其提供错误的函数回调是没有意义的。所以问题是:

  • 您是否对所有资源服务调用都使用某种默认的错误处理程序?你是怎么做的?拦截器
  • 如果您需要为一个特定的服务调用(例如,一百个调用中的一个)创建自定义错误处理程序,那么如何覆盖拦截器的默认错误处理程序呢

对于API错误情况,我更喜欢使用HTTP服务拦截器。这是一件很容易设置的事情。

它做什么?顾名思义,它拦截通过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);
    }
}

第二部分,ResponseHandler在HTTP提供者中的实际"激活":

app.config(errorInterceptor);
errorInterceptor.$inject = ['$httpProvider']
function errorInterceptor ($httpProvider) {
    $httpProvider.interceptors.push('ResponseHandler');
}

我希望这个小例子能清楚地说明如何将它集成到一个有角度的应用程序中。例如,在我的案例中,我通过用toast通知整个应用程序,直接在responseErrorHandler中处理大多数错误情况。

我主要依靠错误状态(例如401或403)来进行特殊操作。我不知道你是否需要更多,但我建议你"玩"一下状态码和响应格式。

例如:如果表单中存在服务器端验证错误,您可能不想在这个基本级别上处理它。因此,我发送了一个特殊的验证错误,状态代码为200,它正在通过拦截器,但随后像往常一样在.then(..)中被捕获。