Nella mia app Io uso un intercettore per catturare tutti gli errori di risposta http, come:angularJS: misura 404 maniglia intercettore - risposta con l'URL
var response = function(response) {
if(response.config.url.indexOf('?page=') > -1) {
skipException = true;
}
return response;
}
var responseError = function(rejection) {
if (rejection.status === 401 || rejection.status === 403) {
/**/
}
else if (rejection.status >= 500 || rejection.status === 0) {
/**/
}
else if (rejection.status === 404 && !skipException) {
/**/
}
else if (rejection.status === 404 && skipException) {
/**/
}
else{
/**/
}
return $q.reject(rejection);
};
E quando vado al mio controller (quando il mio metodo getArticles
restituisce un po ' dati, non 404 - quando l'array articoli è vuoto) tutto è OK: 404 con skipException == true
viene catturato.
Ma quando il mio array di articoli è vuoto il server restituisce un 404 e quando accedo a questo controller non riesco a ottenere response.config.url
- nessuna risposta viene rilevata, ma perché? Pensavo che l'intercettore avrebbe catturato tutte le risposte.
$timeout(function() {
$scope.getArticles();
}, 100);
e $scope.getArticles
ha tale codice:
getDataService.getArticles($scope.pageNum).then(function(response) {
/**/
});
servizio:
var getEventsByScrollService = function(num) {
var deferred = $q.defer();
$http.get(***, {
})
.success(function(response) {
deferred.resolve(response);
}).error(function(err, status) {
if (status === 404){
deferred.resolve([]);
}
else{
deferred.reject(err);
}
});
return deferred.promise;
};
Come posso condizionalmente catturare 404 della seconda l'URL? Perché questo:
if(response.config.url.indexOf('?page=') > -1) {
Non sempre funziona.
Il controllo della logica in base all'URL sembra sbagliato. Sembra che dovresti avere diversi Servizi e/o metodi di servizio per diversi comportamenti di intercettatore. I Metodi di Servizio dovrebbero chiamare diversi interceptor che chiamano diversi Resolver di Errore. Uno degli Error Resolver dovrebbe gestire 404 e un altro dovrebbe ignorare 404. Il metodo di servizio dovrebbe decidere questo. La logica di accoppiamento con i suoni dell'URL è una violazione del SoC. –
puoi condividere il codice completo di error-response – harishr
@DaveAlperovich potresti fornire un esempio con diversi interceptor nel mio caso? – brabertaser19