web-dev-qa-db-fra.com

Angular.js $ http intercept "net :: ERR_CONNECTION_REFUSED"

J'essaie d'écrire un gestionnaire d'erreur générique pour mon site Web à l'aide de $http's intercepteurs mais ils ne semblent pas pouvoir faire ce que je veux faire.

J'ai placé des intercepteurs sur 'response' et 'responseError' mais ils ne sont jamais appelés lorsque le serveur est hors ligne/ne répond pas (net :: ERR_CONNECTION_REFUSED). Je comprends pourquoi cela se produit, il n'y a aucune réponse à l'interception.

J'aimerais savoir s'il existe un moyen générique de détecter ces erreurs, à part écouter le $httpPromise's error callback pour chaque requête.

38
SBSTP

Vous pouvez probablement vérifier l'état de ResponseError. Lorsqu'une API est hors ligne, elle vaut 0 (jusqu'à Angular 1.3.18) ou -1 (puisque Angular 1.3.19)):

angular.module("services.interceptor", arguments).config(function($httpProvider) {
     $httpProvider.interceptors.Push(function($q) {
        return {
          responseError: function(rejection) {
                if(rejection.status <= 0) {
                    window.location = "noresponse.html";
                    return;
                }
                return $q.reject(rejection);
            }
        };
    });
});
64
Ali Habibzadeh