Angular как использовать HttpClient в пользовательском ErrorHandler? - PullRequest
1 голос
/ 10 апреля 2020

Я хотел бы вызвать свой API отдыха в моем собственном обработчике ошибок, чтобы я отправлял электронное письмо при вызове обработчика.

Я пытался использовать Инжектор, но получаю эту ошибку:

Error: Cannot instantiate cyclic dependency! HttpClient

Здесь вы можете увидеть мой обработчик ошибок:

import { Router } from '@angular/router';
import { ErrorHandler, Injector, Injectable, NgZone } from '@angular/core';
import { ToastrService } from 'ngx-toastr';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AppErrorHandler extends ErrorHandler {

  constructor(private injector: Injector) {
    super();
  }

  private get toastrService(): ToastrService {
    return this.injector.get(ToastrService);
  }

  private get http(): HttpClient {
    return this.injector.get(HttpClient);
  }

  private get router(): Router {
    return this.injector.get(Router);
  }

  private get ngZone(): NgZone {
    return this.injector.get(NgZone);
  }

  public handleError(error: any): void {
    if (error.status === 401) {
      this.ngZone.run(() => this.router.navigate(['/home']));
      this.toastrService.error('Login first', 'Error');
    } else if (error.status === 403) {
      this.ngZone.run(() => this.router.navigate(['/home']));
      this.toastrService.error('unauthorize', 'Error');
    } else {
      this.http.post<any>('/api/error-mailer', error).subscribe(() => { });
      this.toastrService.error('Something went wrong', 'Error', { onActivateTick: true });

    }

    super.handleError(error);
  }
}

У меня также может быть неправильный подход, так что если вы поможете мне, это будет здорово!

1 Ответ

1 голос
/ 21 апреля 2020

Вы должны обрабатывать ошибки httpClient с помощью http перехватчика . В перехватчике вы можете ввести необходимые вам услуги. Однако вам следует следить за вызовом http-запроса от перехватчика, потому что он будет проходить через перехватчик, и вы можете получить al oop, когда ваш обработчик ошибок не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...