web-dev-qa-db-fra.com

Comment arrêter les erreurs générées par zone.js dans la console du navigateur?

Voici mon code dans le httpService.ts

public HttpPost(url: string, data: any): Observable<Response> 
{
    let headers = new Headers();
    let reqOpts = new RequestOptions();
    headers.append(AUTH_CONTENT_TYPE_KEY, AUTH_CONTENT_TYPE);
    if (this.Token) {
        headers.append(AUTH_HEADER_KEY, AUTH_TOKEN_PREFIX + this.Token);
    }
    reqOpts.headers = headers;
    return this.http.post(url, data, reqOpts).timeout(30000).map((res: Response) => res)
        .catch((err: Response) => { return Observable.throw(err) });
}

Si j'essaie d'utiliser ce service pour appeler une API comme ceci:

this.httpService.HttpPost(url, data).subscribe(
    (res: any) => 
    {
       // do something
    },
    (error: any) => 
    {
        if (error.status === 409)
            // do something
        else if (error.status === 401)
            // do something
        else
           // do something
    }
);

et si le code d'état res est un autre que 200, tel que 401, 403 ou 409, alors ce type d'erreurs gênantes est généré par zone.js dans la console. (désolé pour masquer une partie de l'URL des API)

enter image description here

Il y a donc de toute façon à arrêter zone.js pour générer un tel type d'erreurs gênantes dans la console, essayé de google pour une solution avec exemple mais pas encore trouvé, merci!

essayé d'utiliser ceci dans main.ts mais n'a pas fonctionné:

window.console.error = function() {};

Modifier: ajouter une trace de pile:

enter image description here

10
Haruka

Lorsqu'une demande réseau échoue, Chrome affiche l'erreur dans la console. L'erreur affiche l'URL qui a échoué, le statut HTTP reçu et l'origine de la demande. Habituellement, dans Angular, vous êtes faire une requête HTTP en réponse à une action de l'utilisateur. Angular capture ces actions en utilisant des zones, donc presque toutes les erreurs ont leur origine dans zone.js. Si vous vérifiez la trace de la pile entière, cependant, vous verrez que l'erreur se produit après des appels à votre propre code. C'est juste que c'est du code dans zone.js ce qui finit par appeler ce code.

Donc, la seule façon de ne pas voir les erreurs de demande dans la console, est de configurer votre console chrome pour les ignorer, mais je ne pense pas qu'il existe une manière programmatique de le faire.

Je suis sûr que tu penses à window.onerror, qui capture en théorie toute exception non capturée. Mais ces erreurs de réseau ne sont pas des exceptions JavaScript, vous ne pourrez donc pas les capturer.

Je ne remplacerais pas console.error. car si vous le faites, vous ne pourrez pas voir les vraies erreurs que vous pourriez avoir dans votre code. Quoi qu'il en soit, comme indiqué, dans ce cas est Chrome qui écrit sur la console, et la seule façon de cacher ces erreurs est, comme je l'ai déjà dit, de les filtrer (mais cela ne fonctionnera que pour vous, bien sûr).

7
Oscar Paz

En mode Dev, vous pouvez ajouter la ligne suivante pour importer une erreur de zone dans src/environments/environment.ts

import `zone.js/dist/zone-error`;

Ensuite, la plupart des traces de pile d'erreur liées à la zone auront disparu.

6
jiali passion