で入れ子になった$のHTTPリクエストを送信します。このサービスには、1つのパブリック関数 "send"が含まれており、要求のデータを取得していくつかのチェックを行います。 1トークンがあるかどうかを確認します:ゲストトークンを取得する要求を送信しない場合は、 2トークンがある場合:期限が切れているかどうかを確認します。必要なリクエストを送信していない場合はチェックします。 3-期限切れの場合:リフレッシュトークン要求を送信し、必要な要求を送信します。
私のサービスコード:
return apiRequestSender.send(data);
その後、使用:
(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);
})();
は、私が「送信」とそれにデータを渡すと、これを返す関数を呼び出すことによって、各コントローラの各サービスで、このサービスを使用しますこのようなルーティングのこのサービス:
{
name: 'home',
url: '/index',
templateUrl: 'home/views/index.html',
controller: 'homeController',
controllerAs: 'vm',
resolve: {
apiResponse: function(homeApiService) {
return homeApiService.getCitiesAreas();
}
}
}
ここで状態doe私の間違いが何であるか、それぞれの要求の前にこれらのチェックをどのように実装するのかを考えないでください。