angularjs – 如何在响应拦截器中再次发送请求?
发布时间:2020-12-17 08:31:17 所属栏目:安全 来源:网络整理
导读:我在我的应用程序中检测会话丢失(服务器发送HTTP 419)拦截器。在这种情况下,我需要从服务器请求一个新的会话,然后我想自动发送原始请求。 也许我可以保存请求在请求拦截器,然后再发送,但可能有一个更简单的解决方案。 注意,我必须使用特定的webservice
|
我在我的应用程序中检测会话丢失(服务器发送HTTP 419)拦截器。在这种情况下,我需要从服务器请求一个新的会话,然后我想自动发送原始请求。
也许我可以保存请求在请求拦截器,然后再发送,但可能有一个更简单的解决方案。 注意,我必须使用特定的webservice来创建会话。 angular.module('myapp',[ 'ngResource' ]).factory(
'MyInterceptor',function ($q,$rootScope) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
},function (response) {
if(response.status == 419){
// session lost
// create new session server-side
// Session.query();
// then send current request again
// ???
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});
这里是我的解决方案使用承诺的那些感兴趣。基本上,您需要请求一个新的会话,并等待响应,然后发送对应于原始请求的新请求(使用response.config)。通过返回promise $ http(response.config),您确保响应将被视为是原始请求。
(语法可能不是最好的,因为我是新的promises) angular.module('myapp',function (response) {
if(response.status == 419){
// session lost
var Session = $injector.get('Session');
var $http = $injector.get('$http');
// first create new session server-side
var defer = $q.defer();
var promiseSession = defer.promise;
Session.query({},function(){
defer.resolve();
},function(){
// error
defer.reject();
});
// and chain request
var promiseUpdate = promiseSession.then(function(){
return $http(response.config);
});
return promiseUpdate;
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
