Обрабатывать ошибки HTTP глобально в угловых - PullRequest
1 голос
/ 27 мая 2019

Я работаю в Обработка ошибок http . Я написал обработку ошибок в каждом компоненте, что не является хорошей практикой кодирования. Поэтому я решил написать общую обработку ошибок http в глобальном масштабе. Я искал это, я столкнулся с концепцией http-interceptor, я думаю, что существует лучший способ обработки ошибок HTTP . То, что я пробовал в каждом компоненте, приведено ниже. Вместо этого мне нужен глобальный метод. У меня уже есть файл http-перехватчика, код которого я вставил ниже.

component.ts:

this.serviceName.methodName().catch(err => {
  console.log("Something went wrong with the request, please try again.");
  return Observable.throw(err.message.toUpperCase() || 'API_ERROR');
}).subscribe((res) => {
   console.log(res);
},
 error=>{
    this.openSnackBar('danger', "Something went wrong with the request, please try again.");
 });

HTTP-перехватчик:

import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse } from "@angular/common/http";
import { Observable } from "rxjs";
import { tap } from 'rxjs/operators';

@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
constructor() { }

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(tap(
        event => event instanceof HttpResponse ? 'succeeded' : '',
        err => 'failed'
    ))
 }
}

Пожалуйста, помогите. Благодаря.

1 Ответ

1 голос
/ 27 мая 2019

Попробуйте это:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(tap(
      event => event instanceof HttpResponse ? 'succeeded' : '',
      err => {
        this.openSnackBar('danger', "Something went wrong with the request, please try again.");
      }
    ))
  }
...