w moim app używam przechwytywania złapać wszystkie błędy odpowiedzi HTTP, takich jak:angularjs custom 404 przechwytujących uchwyt - odpowiedź z 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);
};
A kiedy idę do mojego kontrolera (gdy moja metoda getArticles
zwraca niektóre dane, a nie 404 - kiedy tablica artykułów jest pusta) wszystko jest OK: 404 z przechwyceniem skipException == true
.
Ale kiedy moja tablica artykułów jest pusta, serwer zwraca 404, a kiedy wchodzę do kontrolera, nie mogę uzyskać response.config.url
- żadna odpowiedź nie zostanie złapana, ale dlaczego? Myślałem, że przechwytujący złapie wszystkie odpowiedzi.
$timeout(function() {
$scope.getArticles();
}, 100);
i $scope.getArticles
ma taki kod:
getDataService.getArticles($scope.pageNum).then(function(response) {
/**/
});
usługa:
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;
};
Jak mogę złapać 404 warunkowo użytkownika w zależności od adresu URL? Ponieważ:
if(response.config.url.indexOf('?page=') > -1) {
Nie zawsze działa.
Sprawdzanie logiki według adresu URL brzmi źle. Wydaje się, że powinieneś mieć różne Usługi i/lub metody Usług dla różnych zachowań przechwytujących, Metody Usług powinny wywoływać różne przechwytywacze, które wywołują różne Rozwiązania Błędów. Jeden z modułów do rozwiązywania błędów powinien obsługiwać 404, a inny powinien ignorować 404. Metoda serwisowa powinna decydować o tym. Logika sprzężenia z dźwiękami URL-a przypomina naruszenie SoC. –
Czy możesz udostępnić pełny kod odpowiedzi na błąd – harishr
@DaveAlperovich czy możesz podać przykład z różnymi przechwytującymi w moim przypadku? – brabertaser19