après avoir lu la documentation sur angular sur la gestion des erreurs du client http, je ne comprends toujours pas pourquoi je n'attrape pas une erreur 401 du serveur avec le code ci-dessous:
export class interceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('this log is printed on the console!');
return next.handle(request).do(() => (err: any) => {
console.log('this log isn't');
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
console.log('nor this one!');
}
}
});
}
}
sur le journal de la console, j'obtiens également ceci:
zone.js: 2969 GET http: // localhost: 8080/test 401 ()
core.js: 1449 ERREUR HttpErrorResponse {headers: HttpHeaders, status: 401, statusText: "OK", url: " http: // localhost: 8080/test ", ok: false,…}
Vous devez intercepter une erreur en utilisant catchError
return next.handle(request)
.pipe(catchError(err => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
console.log('this should print your error!', err.error);
}
}
}));
Vous devez passer la valeur de l'argument à la fonction do du flux, pas créer une nouvelle fonction à l'intérieur:
return next.handle(request)
.do((err: any) => {
console.log('this log isn't');
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
console.log('nor this one!');
}
}
});
Votre gestionnaire d'erreurs doit renvoyer une new Observable<HttpEvent<any>>()
return next.handle(request)
.pipe(catchError((err: any) => {
console.log('this log isn't');
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
console.log('Unauthorized');
}
}
return new Observable<HttpEvent<any>>();
}));
Il est hors de portée, mais Angular a une meilleure opportunité de gestion des erreurs que l'intercepteur. Vous pouvez implémenter votre propre ErrorHandler. https://angular.io/api/core/ErrorHandler =