在角度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'答案 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 版本中没有它。