2

在角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'); 
}); 

添加攔截我得到遺漏的類型錯誤:無法從AccApp

回答

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中沒有使用它。

+0

仍然是同樣的問題 – MohamedAbbas

+0

當您調用'push'函數並檢查'$ httpProvider'參數的屬性時,請在該行中放置一個斷點。在嘗試將其添加爲攔截器之前,請確保註冊工廠的代碼已被調用。這可能很明顯,但值得檢查。 –

+0

$得到:數組[7] 0: 「$ httpBackend」 1: 「$瀏覽器」 2: 「$ cacheFactory」 3: 「$ rootScope」 4: 「$ Q」 5: 「$注射器」 – MohamedAbbas