Angular Общая обработка ошибок при непредвиденных ошибках - PullRequest
0 голосов
/ 18 марта 2020

Есть ли способ установить общее поведение при обработке ошибок (например, выдать общее сообщение об ошибке) на случай, если с сервером что-то не так? В моем проекте я отправляю или запрашиваю данные в или из серверной части,

this.userService.post(this.user).subscribe( (reponse: Response) => {
    if(response.status === 200){
        // success
    }
}, error => this.handleError(error._body));

, и когда что-то не так с данными или пользователем и т. Д. c., Я возвращаю ответ, который включает сообщение об ошибке в теле. Но когда возникает ошибка, которая не генерируется преднамеренно бэкэндом (например, внутренняя ошибка сервера 500), я передаю трассировку стека пользователю.

Было бы лучше установить общее сообщение об ошибке, которое отображается в веб-интерфейсе, когда что-либо действительно идет не так в серверной части. Как? Я ищу решение, в котором мне не нужно различать guish в каждом бэкэнд-запросе или сообщении, если ошибка является неожиданной или вызвана бэкэндом (если это помогает: каждая ошибка, выдаваемая бэкендом, намеренно имеет код состояния 409).

1 Ответ

0 голосов
/ 18 марта 2020

Вы можете использовать перехватчики:

создать сервис и реализовать HttpInterceptor интерфейс

@Injectable()
export class HttpErrorService implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((error: any) => {
        if (error instanceof HttpErrorResponse) {
          if (error.status === 409) {
            console.log('409 ERROR'); <-- gets called on each response
          } else if(error.status === 500) {
           console.log('500 ERROR'); <-- gets called on each response 
          }
        }
        return throwError(error);
      }),
    );
  }

}

, а затем добавить HttpErrorService к вашему app.module.ts

    providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: HttpErrorService,
      multi: true
    },
  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...