web-dev-qa-db-fra.com

Obtenir un message d'erreur de Angular 2 http

J'ai le code suivant dans mon service

myService.ts

makeHttpGetRequest(url){

        return Observable.interval(config.SUPERVISOR_REFRESH_INTERVAL * 1000)
            .switchMap(() => this.http.get(url))
            .map(res => res.json())
            .timeout(config.REQUEST_TIMEOUT * 1000, new Error('Time out occurred'))

    }

Dans mon fichier de composant,

myComponent.ts

ngOnInit(){
        this._myService.makeHttpGetRequest(myurl)
            .subscribe(
                data => {
                    this.supervisorServers = data;
                    }

                },
                error => {
                    this.error = true;
                    console.log(error); //gives an object at this point
                    this.showError(error);
                }
            );
    }

Je veux imprimer le message d'erreur dans le cas de par ex. Invailid url . Lorsque j'imprime l'erreur, j'obtiens un objet (probablement un objet réponse) comme suit

Object { _body: error, status: 200, statusText: "Ok", headers: Object, type: 3, url: null }

Si je l'ouvre, je ne trouve pas le message d'erreur. Existe-t-il un meilleur moyen d’obtenir des messages d’erreur Precies?

12
user3288346

L'erreur est contenue dans le corps de la réponse même dans ce cas. Voir la fonction onError du gestionnaire d’événements d’erreur:

Vous pouvez y accéder en utilisant la méthode json sur la réponse:

error => {
  this.error = true;
  console.log(error.json()); //gives the object object
  this.showError(error.json());
}

Modifier

J'ai étudié un peu plus cette question. En fait, vous ne pouvez pas avoir le message exact. Je veux dire le net::ERR_NAME_NOT_RESOLVED. XHR ne le fournit pas. Cela dit, vous pouvez voir que la status de XHR est 0. Cela pourrait être un indice qu'il y avait un problème avec la demande lors de l'envoi de la demande (ce n'est pas réellement envoyé).

error => {
  (...)
  var err = error.json();
  var status = err.currentTarget.status;
  (...)
}

Voir cette question:

9
Thierry Templier

J'essaie error.error et travaille pour moi. Son obtenir l'erreur de message d'objet.

MODIFIER:

Pardon!!

Essaye ça: 

            error => {
                this.error = true;
                console.log(error.error); 
                this.showError(error.error);
            }
1
Jessica Rocha