无法推动拦截器

时间:2014-07-02 21:51:31

标签: javascript angularjs angularjs-service angularjs-routing

在角度js我已经提供了一个服务,应该验证用户只是它存储一个令牌并发送它与每个请求,所以我使用拦截器。 她是拦截器的代码。

app.factory('authInterceptorService',['$q', '$location', '$cookieStore', function( $q, $location, $cookieStore){
     var authInterceptorServiceFactory = {};
     var _request = function(config){
         config.headers = config.headers || {};
         var authData = $cookieStore.get('AuthorizationHeader');
         if(authData){
             config.headers.AuthorizationHeade = authData.token;
         }
         return config;
     }

     var _responseError = function(rejection) {
         if(rejection.status === 401){
             $location.path('/');
         }
         return $q.reject(rejection);
     }
     authInterceptorServiceFactory.request = _request;
     authInterceptorServiceFactory.responseError = _responseError;
     return authInterceptorServiceFactory;
}]);

问题是当我尝试添加拦截器

app.config(function ($httpProvider) {
    $httpProvider.interceptors.push('authInterceptorService');
});

我得到Uncaught TypeError:无法从AccApp

读取未定义的属性'push'

1 个答案:

答案 0 :(得分:2)

您提到的错误消息表明可能无法正确注入$httpProvider参数。也许您使用某种混淆来改变变量名称并打破注入机制。 请尝试更改:

app.config(function ($httpProvider) { ... }); 

进入:

app.config(["$httpProvider", function ($httpProvider) { ... }]);

如果这解决了这个问题,请告诉我。

修改

在评论中进行了简短的讨论后,似乎错误是由过于古老的AngularJS版本引起的。要使用interceptors集合,至少需要1.1.4版本,根据以下链接:AngularJS $httpProvider undefined

编辑II

升级angularjs版本后问题得到解决,但出现了另一个问题,似乎你自己解决了它:)。按照约定,我将有关它的信息添加到答案中。 根据我们的讨论,升级angularjs版本后必须包含ngRoute,尽管代码在 1.0.7 版本中没有它。