gpt4 book ai didi

AngularJs : event listener on http requests

转载 作者:行者123 更新时间:2023-12-02 22:22:29 25 4
gpt4 key购买 nike

由于我使用 Oauth2 来保护我的 Api,因此如果之前的访问 token 已过期,我需要在任何 http 请求之前获取新的访问 token 。

直到现在我还没有太多使用事件监听器。

这是我现在所做的(请告诉我它是否正确):

ApplicationController.js:

app.controller('ApplicationController', function($rootScope, $scope, $localStorage, AuthService){

// Listening event apiRequested
$scope.$on('event:apiRequested', function(e) {

AuthService.token();
// Restore the access_token in case it has changed
access_token = $localStorage.getObject('access_token');

});

})

UserController.js:

$rootScope.$broadcast('event:apiRequested');

// Get Users around
return $http.post(domain+'/api/users?access_token='+access_token.key, data).then(function(response){
return response;
});

首先我不确定...如果事件已经完全执行,$http 是否会被处理?

因此,由于我不确定,我正在考虑添加回调。

这里的想法:

$rootScope.$broadcast('event:apiRequested', function(response){

if(response){

// Get Users around
return $http.post(domain+'/api/users?access_token='+access_token.key, data).then(function(response){
return response;
});

}

});

请告诉我是否可以这样做,或者我应该在这种情况下使用事件监听器之外的其他内容。

最佳答案

为什么不使用 interceptors那是为了拦截HTTP请求吗?在您的情况下,您应该将这个非常具体的行为添加到“请求”部分中。

参见下面的拦截器示例:

var $myService; // Add a constant that store the service
$httpProvider.interceptors.push(['$location', '$injector', '$q', function($location, $injector, $q) {
return {

'request' : function(config){
console.log("intercept request", config.url,config)
// Your token shall be retreive in this part
return config
},
'response' : function(config){
$myService= $myService|| $injector.get('$myService'); // inject the service manually if constant is undefined
console.log("intercept response", config)
// Your token shall be retreive in this part
return config
},
'responseError': function(rejection) {

console.log("responseError intercepted" , rejection);
if (rejection.status === 403) {

return $q.reject(rejection);

} else if (rejection.status === 423) {



return $q.reject(rejection);
}else
return $q.reject(rejection);
}
};
}]);

拦截器应定义在 .config(["$httpProvider", function($httpProvider)

关于AngularJs : event listener on http requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com