Почему запрос клиента http возвращает ошибку в виде строки вместо HttpErrorResponse? - PullRequest
0 голосов
/ 24 мая 2019

Я использую HttpClient для создания POST-запроса и возврата Observable вызывающей стороне. Когда вызывающий абонент подписывается и пытается перехватить ошибку, ошибка представляет собой строку вместо ожидаемого HttpErrorResponse, как это обычно наблюдается в документации. screenshot of developer console

Я пытался обработать ошибку непосредственно в вызывающем методе, используя канал с catchError, но он получает ту же ошибку, что и выше.

Вот код моего метода обслуживания

createPartner(partner: Partner) {
    return this.http.post(this.publicUrl + "partner", partner).pipe(catchError(this.handleError));
  }

 handleError(error: HttpErrorResponse) {
    console.log(error);
    return throwError(error);
  }

Ответы [ 3 ]

0 голосов
/ 24 мая 2019

Вы можете проверить документацию еще раз, так как в документации указано сообщение об ошибке типа string. https://angular.io/api/common/http/HttpErrorResponse#constructor(). Также обратите внимание, что сервер возвращает статус 500, вы также можете рассмотреть https://angular.io/api/common/http/HttpInterceptor.

0 голосов
/ 24 мая 2019

Я обнаружил проблему, я забыл, что у меня есть перехватчик, который изменял ошибку. Если кто-то еще такой же забывчивый, как я, проверь свои перехватчики!

0 голосов
/ 24 мая 2019
 /** Error Handling method */

  handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
      // A client-side or network error occurred. Handle it accordingly.
      console.error('An error occurred:', error.error.message);
    } else {
      // The backend returned an unsuccessful response code.
      // The response body may contain clues as to what went wrong,
      console.error(
        `Backend returned code ${error.status}, ` +
        `body was: ${error.error}`);
    }
    // return an observable with a user-facing error message
    return throwError(
      'Something bad happened; please try again later.');

  }
...