在 Angular js 中,我创建了一个服务,该服务应该对用户进行身份验证,它存储一个 token 并随每个请求发送它,所以我使用了拦截器。 她是拦截器的代码。
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”
最佳答案
您提到的错误消息表明$httpProvider
参数可能未正确注入(inject)。也许您使用某种混淆来更改变量名称并破坏注入(inject)机制。
请尝试更改:
app.config(function ($httpProvider) { ... });
进入:
app.config(["$httpProvider", function ($httpProvider) { ... }]);
请告诉我这是否可以解决问题。
编辑
经过评论中的简短讨论,该错误似乎是由太旧的 AngularJS 版本引起的。为了使用 interceptors
集合,至少需要 1.1.4 版本,根据此链接:AngularJS $httpProvider undefined .
编辑二
升级 angularjs 版本后问题解决了,但是又出现了一个问题,看来你自己解决了:)。按照约定,我正在将有关它的信息添加到答案中。
根据我们的讨论,升级 AngularJS 版本后必须包含 ngRoute
,尽管在 1.0.7 版本中代码无需包含它即可工作。
关于javascript - 无法推送拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541630/