角度选择退出拦截器行为



在我的角度应用程序中,我正在寻找一种处理所有服务器响应错误的方法(带有显示错误消息的弹出框),但允许控制器选择退出此行为,并在调用$resource时根据需要自行处理错误。

我打算只使用拦截器并让它处理所有错误。类似的东西

$httpProvider.interceptors.push(function($q) {
    return { 
        'responseError': function(rejection) {
            displayMessage(rejection);
            return $q.reject(rejection);
        }
    };
});

然后从控制器,如果我打电话

$scope.widget = WidgetResource.get();

并且服务器响应 401 错误,用户将看到一条错误消息,指出他们未获得授权。

但我突然想到,有时控制器可能希望自己处理错误响应(即,在给定上下文中显示错误的更好方法)。它可以选择退出拦截器正在做的事情的方法是什么?

或者,也许拦截器不是实现这一目标的方法。我还可以使用什么来处理此横切问题并允许选择退出?

您可以使用拦截器来处理不特定于上下文的错误。我们发现这实际上是一个很好的做法。会话超时 (401) 或内部服务器错误 (500) 等错误可以由拦截器处理。而上下文特定的错误在其各自的服务回调中得到更好的处理。

您可以通过以下方式根据 HTTP 状态代码进行区分:

function responseError(rejection) {
        switch (rejection.status) {
          case 401:
            //handle unauthenticated request
          case 500:
            //Oops something has gone wrong due to an internal server error
          default:
            break;
        }
        return $q.reject(rejection);
      }

$q.reject(rejection)后,控件将转发到相应$resource实例的错误处理程序。因此,在上面的示例中,来自服务器的 404 将被转发到相应的控制器或服务的错误处理程序。

相关内容

  • 没有找到相关文章

最新更新