首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular opt out of Interceptor行为

Angular opt out of Interceptor行为
EN

Stack Overflow用户
提问于 2014-03-02 02:20:13
回答 1查看 276关注 0票数 2

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

我打算只使用一个拦截器,让它处理所有的错误。就像这样

代码语言:javascript
复制
$httpProvider.interceptors.push(function($q) {
    return { 
        'responseError': function(rejection) {
            displayMessage(rejection);
            return $q.reject(rejection);
        }
    };
});

然后从控制器,如果我调用

代码语言:javascript
复制
$scope.widget = WidgetResource.get();

并且服务器以401错误响应,则会向用户显示一条错误消息,说明他们未获得授权。

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

或者,拦截器可能不是解决这个问题的方法。我还能用什么来处理这种横切关注点,并允许选择退出?

EN

回答 1

Stack Overflow用户

发布于 2014-03-02 02:56:02

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

您可以通过以下方式根据HTTP status codes进行区分:

代码语言:javascript
复制
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将被转发到您各自的控制器或服务的错误处理程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22118377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档