Угловой возврат 404 при запросе

#angular #typescript

Вопрос:

В коде нет ошибки , проблема в том , что когда в базе данных нет данных, и я попытался запросить, он возвращает 404, но когда в базе данных есть данные, ошибка не отображается, как мы с этим справляемся ?

Я не хочу возвращать ошибку 404, когда при запросе в базе данных нет данных. Если в базе данных нет данных, то не возвращайте никаких ошибок

введите описание изображения здесь

#Код

 private _pageEventDealsForApprovalList() {
    this.searchInput = '';
    const status = 'ForApproval'
    this.isLoading = true;
    this.dealService
      .getAllDeals(
        status,
        this.accountId,
        this.transaction.id,
        this.table.pageIndex   1,
        this.table.pageSize,
        this.searchInput,
        this.table.sortParams,
        this.table.sortDirs
      )
      .pipe(finalize(() => (this.isLoading = false)))
      .subscribe({
        error: (err) => this.notificationService.showError(err),
        next: (res) => {
          this.table.data = res.items;
          this.todalDealsForApproval = res.items.length;
          setTimeout(() => {
            this.trasactionService.transactionEvent.next({
              sendData: this.todalDealsForApproval,
              operation: 'transaction/update/count'
            });
          }, 1000);
        },
        complete: noop,
      });
  }
 

Комментарии:

1. Это должно обрабатываться со стороны API. Если данных не существует, вы можете вернуть NoContent (204) или Ok (200)

2. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Взгляните на catchError, который вы могли бы использовать для решения своей проблемы. Этот оператор преобразует вашу ошибку и вместо этого вернет другое значение (например EMPTY , из пространства имен rxjs, если вы не хотите ничего возвращать в случае, если что-то пойдет не так).

Это может быть не очень хорошей идеей во всех случаях, так как это молча проглатывает ошибку (хотя в вашем примере вы отображаете сообщение об ошибке). Возможно, вы захотите сделать это только для определенных типов ошибок или, как указано в комментарии @Yaseer к вашему исходному вопросу, вместо этого верните какой-то пустой набор результатов из бэкенда.

 private someMethod {
    this.removedForBrevity()
      .pipe(
        catchError((err) => {
          this.notificationService.showError(err);
          return EMPTY;
        }),
        finalize(() => (this.isLoading = false))
      )
      .subscribe({
        error: noop,
        next: (res) => {
          this.table.data = res.items;
          this.todalDealsForApproval = res.items.length;
          setTimeout(() => {
            this.trasactionService.transactionEvent.next({
              sendData: this.todalDealsForApproval,
              operation: 'transaction/update/count'
            });
          }, 1000);
        },
        complete: noop,
      });
  }
 

Комментарии:

1. Привет , какой пустой результат я буду ставить и усваивать при возврате ПУСТЫМ;?

2. EMPTY не выдает никакого значения, поэтому обратный вызов для next вообще не вызывается.