Как изящно обработать 404 в угловом компоненте? - PullRequest
0 голосов
/ 07 сентября 2018

Я использую Angular 6. И в этом конкретном случае использования вы хотите обработать 404, а скорее передать его компоненту для отображения текстового сообщения в пользовательском интерфейсе.

// code in service
public getVariatioMarginPlugDates(): Observable<Date[]> {
return this._http
              .get<Date[]>(AppSettings.VariationMarginPlugDatesUrl, { withCredentials: true })
              .pipe(catchError(this._trace.handleError('GET ' + AppSettings.VariationMarginPlugDatesUrl, [])));
}

404 также обрабатывается catchError, который использует утилиту обработки ошибок. Однако я хочу перехватить 404 и потенциально установить некоторую логическую переменную, которую компонент мог бы использовать для отображения полезного сообщения о состоянии в пользовательском интерфейсе (не ища 404 перенаправление или универсальное всплывающее окно)

Большое спасибо!

// edited code with solution
public getVariatioMarginEmail(runDate: string): Observable<any> {
const url = AppSettings.VariationMarginEmailUrl.replace(this._regExp, runDate);
return this._http
              .get<any>(url, { withCredentials: true })
              .catch(this._trace.handleError('GET ' + url, []));
}

public handleError<T>(operation = 'operation',  result?: T, skipStatus = [404]) {
    return (error: any): Observable<T> => {

      if (skipStatus.includes(error.status)) {
        return observableOf(error.status as T);
      }

      const errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
      console.error(errMsg);

      const dialog = this._dialogService.open({
        title: 'Server Error',
        content: `${operation} failed: ${errMsg}`,
        actions: [ { text: 'Ok' } ]
      });

      try { this._loggingService.log(errMsg); } catch (error) {}

      return observableOf(result as T); // return empty result
  };
}

1 Ответ

0 голосов
/ 07 сентября 2018

Я думаю, вам нужно изменить метод ошибки дескриптора, пара вариантов:

1) Не кладите это в трубу здесь. Тогда ваш компонент получит ошибку, и вы можете проверить код состояния и обработать, как вам нужно

2) Измените метод handle, чтобы проверить состояние, и отбросьте 404, которые компонент может обработать. Вы можете сделать это, если вы все еще хотите вести другие журналы и т. Д. В методе handleError

3) Измените метод handle, чтобы получить конфигурацию, сообщающую ему, какой статус пропустить, 404. Вы можете сделать это, если некоторые компоненты должны получить универсальный метод, но этот компонент определенно должен обработать саму свою ошибку

...