【问题标题】:Can not push an interceptor无法推送拦截器
【发布时间】:2014-08-23 20:45:21
【问题描述】:

在 Angular 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: Cannot read property 'push' of undefined from AccApp

【问题讨论】:

    标签: javascript angularjs angularjs-service angularjs-routing


    【解决方案1】:

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

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

    进入:

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

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

    编辑

    在 cmets 中经过简短讨论后,似乎该错误是由 AngularJS 版本太旧引起的。要使用 interceptors 集合,至少需要 1.1.4 版本,根据此链接:AngularJS $httpProvider undefined

    编辑 II

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

    【讨论】:

    • 还是同样的问题
    • 调用push函数时请在该行下断点,并检查$httpProvider参数的属性。还请确保在您尝试将其添加为拦截器之前调用注册工厂的代码。这可能很明显,但值得检查。
    • $get: Array[7] 0: "$httpBackend" 1: "$browser" 2: "$cacheFactory" 3: "$rootScope" 4: "$q" 5: "$injector "
    • 拦截器是不确定的
    • 所以请验证您正在使用的 angularjs 版本。此链接:stackoverflow.com/questions/19364450/… 建议至少需要 1.1.4 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2015-11-22
    • 2014-03-10
    相关资源
    最近更新 更多