1

我的问题是关于$resource拦截器(responseError)。我想强调一下,我基于的 angularjs 是V1.3.6.

问题:

app.factory('authInterceptor',['$q', '$location', '$log', function($q, $location, $log){
    $log.debug('this is a regular factory with injection');
    return {
        responseError: function(response){
            console.log(response)
            // problem is that I cant check 401 by response.status, 
            // because the response here is AN ERROR OBJECT like `SyntaxError: ...`. Anyway to get the status?
            return $q.reject(response);
        }
    }
}])

当我收到 401 响应时,responseError的参数是 AN ERROR OBJECT ,因为来自服务器的响应是带有 statusSyntaxError: Unexpected token U的纯文本。Unathorized401

但我想得到 ,如果是response.status,就做点什么401

任何帮助将不胜感激。

4

2 回答 2

4

这个问题应该关闭,因为我终于找到了自己的答案。

当响应为 401/404 和 200 以外的任何内容时,transformResponse仍然执行并发生错误!此错误仅涵盖正常响应(具有状态属性),因此我从未在拦截器中获得原始响应!

transformResponse如果响应的状态不是 200 ,我认为执行是愚蠢的!在里面transformResponse,你不能访问状态码......

于 2015-01-05T05:13:17.103 回答
0

这是一个处理 401 的简单拦截器,以及一些配置:

angular.module('notesApp', [])
  .factory('AuthInterceptor',['AuthInfoService', '$q', function(AuthInfoService, $q) {
      return {

        responseError: function(responseError) {
              if (responseError.status === 401) { // authentication issue
                    //redirect user to login or do something else...
              }
              return $q.reject(responseError);
        }
     };
 }])
 .config(['$httpProvider', function($httpProvider) {
     $httpProvider.interceptors.push('AuthInterceptor');
}]);

** 这里是一个拦截器,它只拦截带有非 200 状态码的传入响应。** 如果状态码是 401,用户将被重定向到登录页面。在这种情况下,promise 被拒绝,因此控制器或服务仍然看到失败

于 2015-01-05T03:03:49.203 回答