嵌套$ HTTP請求在我AngularJS需要1.6.4應用到一些檢查之前發送任何$ HTTP請求,所以我創建一個服務來處理,並用它來發送的任何請求。該服務只包含一個公共功能「發送」取出請求的數據並進行一些檢查: 1-檢查是否有令牌:如果沒有發送請求獲取來賓令牌,則發送所需的請求。 2-如果有令牌:檢查它是否過期:是否不發送所需的請求。 3-如果過期:發送刷新令牌請求,然後發送所需的請求。發送在角
我的服務代碼:
(function() {
function service($http, tokenManager, apiService, API_URL, REFRESH_TOKEN_URL, appToken) {
var s = {};
var defaultToken = appToken;
s.send = function(data) {
var token = tokenManager.getToken();
if (token && token.length > 0) {
// check if expired
var isTokenExpired = tokenManager.isTokenExpired();
if (isTokenExpired) {
sendRefreshTokenRequest(token).then(function(response) {
// update the exist token and send with the new one
return sendTheRequiredRequest(data, token);
}, function(errors) {
});
// token is expired so we need to send refresh token then send our request
} else {
// send our request
return sendTheRequiredRequest(data, token);
}
} else {
token = defaultToken;
// if the request not login or count send getToken for guest first
if (data.loginAuthentication || data.countryCitiesAreasList) {
//send the request with the defaultToken
return sendTheRequiredRequest(data, defaultToken);
} else {
// send guest token first then the request
sendRequestGetTokenForGuest(defaultToken).then(function(response) {
var newToken = response.data.token;
var isSetted = tokenManager.setToken(newToken);
return sendTheRequiredRequest(data, newToken);
}, function(errors) {
});
}
}
};
function sendRequestGetTokenForGuest(token) {
var data = apiService.getApiObj("gtoken", "11651");
var headerParams = createHeaderParams(token);
return $http({
method: "POST",
url: API_URL,
headers: headerParams,
data: data
});
}
function sendRefreshTokenRequest(token) {
var headerParams = createHeaderParams(token);
return $http({
method: "POST",
url: REFRESH_TOKEN_URL,
headers: headerParams
});
}
function sendTheRequiredRequest(data, token) {
var headerParams = createHeaderParams(token);
return $http({
method: "POST",
url: API_URL,
headers: headerParams,
data: data
});
}
function createCurrentTimeStamp() {
return Math.floor(Date.now()).toString();
}
function createHeaderParams(token) {
var headerParams = {
token: token,
clientTimeStamp: createCurrentTimeStamp()
};
return headerParams;
}
return s;
}
angular.module('app').factory('apiRequestSender', service);
})();
我用在每個控制器的服務該服務通過調用函數「發送」,數據傳遞給它,並返回此:
return apiRequestSender.send(data);
然後使用這種服務在路由中是這樣的:
{
name: 'home',
url: '/index',
templateUrl: 'home/views/index.html',
controller: 'homeController',
controllerAs: 'vm',
resolve: {
apiResponse: function(homeApiService) {
return homeApiService.getCitiesAreas();
}
}
}
現在國家母鹿不能渲染那麼我的錯誤是什麼,或者我在每次請求之前如何執行這些檢查?