Javascript Angularjs(1.3.6+;)$资源拦截器和全局401处理程序
我的问题是关于Javascript Angularjs(1.3.6+;)$资源拦截器和全局401处理程序,javascript,angularjs,http-status-code-401,angular-http-interceptors,Javascript,Angularjs,Http Status Code 401,Angular Http Interceptors,我的问题是关于$resource的拦截器(responseError)。我想强调的是,我所基于的angularjs是V1.3.6 问题: app.factory('authInterceptor',['$q', '$location', '$log', function($q, $location, $log){ $log.debug('this is a regular factory with injection'); return { responseErr
$resource
的拦截器(responseError)。我想强调的是,我所基于的angularjs是V1.3.6
问题:
app.factory('authInterceptor',['$q', '$location', '$log', function($q, $location, $log){
$log.debug('this is a regular factory with injection');
return {
responseError: function(response){
console.log(response)
// problem is that I cant check 401 by response.status,
// because the response here is AN ERROR OBJECT like `SyntaxError: ...`. Anyway to get the status?
return $q.reject(response);
}
}
}])
当我得到401响应时,responseError
的参数是一个错误对象,类似于SyntaxError:Unexpected token U
,因为来自服务器的响应是纯文本未加密的
,状态为401
但是我想得到响应.status
,如果是401
,我想做点什么
任何帮助都将不胜感激。这里有一个简单的拦截器,可以处理401,还可以进行一些配置:
angular.module('notesApp', [])
.factory('AuthInterceptor',['AuthInfoService', '$q', function(AuthInfoService, $q) {
return {
responseError: function(responseError) {
if (responseError.status === 401) { // authentication issue
//redirect user to login or do something else...
}
return $q.reject(responseError);
}
};
}])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('AuthInterceptor');
}]);
**这是一个拦截器,它只截获带有非200状态码的传入响应。**
如果状态代码为401,则用户将重定向到登录页面。在这种情况下,承诺被拒绝,因此控制器或服务仍然会看到故障这里有一个简单的拦截器,它可以处理401,还可以进行一些配置:
angular.module('notesApp', [])
.factory('AuthInterceptor',['AuthInfoService', '$q', function(AuthInfoService, $q) {
return {
responseError: function(responseError) {
if (responseError.status === 401) { // authentication issue
//redirect user to login or do something else...
}
return $q.reject(responseError);
}
};
}])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('AuthInterceptor');
}]);
**这是一个拦截器,它只截获带有非200状态码的传入响应。**
如果状态代码为401,则用户将重定向到登录页面。在这种情况下,承诺被拒绝,因此控制器或服务仍然会看到故障这个问题应该结束,因为我最终找到了答案
当响应为401/404以及200以外的任何值时,
transformResponse
仍在执行,并且发生了一个错误!这个错误只覆盖了正常响应(具有status属性),所以我从来没有在拦截器中得到原始响应
我认为如果响应的状态不是200,那么执行
transformResponse
是愚蠢的!在transformResponse
中,您无法访问状态代码…这个问题应该关闭,因为我终于找到了答案
当响应为401/404以及200以外的任何值时,
transformResponse
仍在执行,并且发生了一个错误!这个错误只覆盖了正常响应(具有status属性),所以我从来没有在拦截器中得到原始响应
我认为如果响应的状态不是200,那么执行
transformResponse
是愚蠢的!在transformResponse
内部,您无法访问状态代码…那么,responseError.status
从哪里来?响应错误未定义。什么是AuthInfoService?我编辑了successHandler以使事情更清楚一些。responseError是承诺的成功处理程序中的参数。AuthInfoService是一种服务,用于帮助获取请求的授权标头。它还可以将用户重定向到loginpage。但是你不需要它。请再次检查我的问题。我的问题是响应。状态未定义!这就是您的响应错误。状态未定义。Angular1.3.6是否使用grunt build?检查正在加载的CDN。您还可以查看Angular V1.3.8或其他不应该存在问题的内容。查看此JonasHartmann代码:当响应为401/404且除200以外的任何值时,transformResponse
仍在执行,并发生错误!这个错误只覆盖了正常响应(hasstatus属性),所以我从来没有在拦截器中得到原始响应!那么,responseError.status
来自哪里?响应错误未定义。什么是AuthInfoService?我编辑了successHandler以使事情更清楚一些。responseError是承诺的成功处理程序中的参数。AuthInfoService是一种服务,用于帮助获取请求的授权标头。它还可以将用户重定向到loginpage。但是你不需要它。请再次检查我的问题。我的问题是响应。状态未定义!这就是您的响应错误。状态未定义。Angular1.3.6是否使用grunt build?检查正在加载的CDN。您还可以查看Angular V1.3.8或其他不应该存在问题的内容。查看此JonasHartmann代码:当响应为401/404且除200以外的任何值时,transformResponse
仍在执行,并发生错误!这个错误只覆盖了正常响应(hasstatus属性),所以我从来没有在拦截器中得到原始响应!