Angularjs(1.3.6+) $resource拦截器和全局 401 处理程序
Angularjs(1.3.6+) $resource interceptors and global 401 handlers
我的问题是关于$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
的纯文本Unathorized
。
但是我想得到response.status
,如果401
,就做点什么。
任何帮助将不胜感激。
这个问题应该结束了,因为我自己终于找到了答案。
当响应为 401/404 和 200 以外的任何内容时,transformResponse
仍然执行并发生错误!此错误仅涵盖正常响应(具有状态属性),因此我永远不会在拦截器中得到原始响应!
我认为如果响应的状态不是 200,执行transformResponse
是愚蠢的!而在transformResponse
内部,你无法访问状态代码...
这是一个处理 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,则用户将重定向到登录页面。在这种情况下,承诺将被拒绝,因此控制器或服务仍会看到失败
相关文章:
- 向调用全局javascript函数的对象添加处理程序
- 使用全局快捷方式(如 Spotlight/Launchy)将电子应用程序带到前台
- GAS:在处理程序函数中使用变量时,如何更改全局变量值并保留其更改后的值
- Ember全局应用程序变量
- Selenium Web驱动程序访问Jquery中的Javascript全局变量
- FRP、角度和全局事件处理程序
- AngularJS:如何实现全局错误处理程序并显示错误
- 在处理程序之外传递对象引用,即使其全局化
- 如何让 Mocha 加载定义全局钩子或实用程序的帮助程序.js文件
- 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息
- Angularjs(1.3.6+) $resource拦截器和全局 401 处理程序
- 由全局范围内的 Web 应用程序声明的全局变量
- 角度“响应未定义”时尝试为资源实现全局错误处理程序
- 如何在 Redux 中创建全局错误处理程序并在需要时覆盖它
- 引导程序中的全局变量.js在 Firefox for Android 扩展中
- Chrome 扩展程序全局变量
- Node.js & Express - 应用程序结构的全局模块和最佳实践
- XML 声明中的 NativeScript 全局事件处理程序
- 从 chrome 扩展程序中的内容脚本访问全局对象
- 在 Angular 2 应用程序中全局使用 jQuery