Как я получаю ошибку CORS, которая появляется на консоли, используя угловую обработку ошибок? - PullRequest
0 голосов
/ 12 февраля 2019

Я собрал свой собственный маленький обработчик ошибок для работы с HttpErrorResponses на REST-сервере, но я замечаю, что на клиенте что-то идет не так, и Angular оборачивает их как часть HttpErrorResponse, который передается моей ошибкеобработчик.

Итак, сначала в консоли я вижу следующее:

Доступ к XMLHttpRequest в «http://localhost:8080/group' из источника» http://localhost:4200' заблокирован CORSpolicy: значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», если режим учетных данных запроса «include».Режим учетных данных запросов, инициированных XMLHttpRequest, контролируется атрибутом withCredentials.

, который следует ожидать в данных обстоятельствах, но я бы хотел, чтобы мой обработчик ошибок регистрировал эту ошибку, только я могу 'не вижу как.Это обработчик, который используется:

 getGroups(): Observable<Group[]> {
    return this.http.get<Group[]>(`${this.restUrl}/group`).pipe(
        catchError(
            error => this.errorService.handleError<Group[]>(
                                    error, 'getGroups', [])
          )
      );
  }

и мой сервис ошибок:

  handleError<T>(
      error: HttpErrorResponse,
      operation = 'operation',
      result?: T) {
    this.messageService.add(`${operation} failed`);
    this.messageService.add(`HTTP error response: status[${error.status}];
                error.message:"${error.message}"`);
    this.messageService.add(`Is ErrorEvent? 
                ${error.error instanceof ErrorEvent ? "yes":"no"}`);
    this.messageService.add(`Is ProgressEvent? 
                ${error.error instanceof ProgressEvent ? "yes":"no"}`);

    return of(result as T);
  }

Итак, Angular HttpClient, надеюсь, только что обернул эту ошибку - или полностью заменил ее.Могу ли я получить его в моем обработчике ошибок?

Вывод моего обработчика ошибок:

getGroups failed
HTTP error response: status[0]; error.message:"Http failure response for http://localhost:8080/group: 0 Unknown Error"
Is ErrorEvent? no
Is ProgressEvent? yes

И я не вижу, что я могу сделать с ProgressEvent.

[2019-02-28] Обновление

Как говорит Анжил в комментариях, эта ошибка CORS не является ошибкой HTTP.Это куда-то брошено - и я не знаю что.Это могут быть браузеры, могут быть Angular, RxJS, HttpClient.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете попробовать код, как показано ниже

getGroups(): Observable<Group[]> {
return this.http.get<Group[]>(`${this.restUrl}/group`).subscribe(
    results => {
      console.log(results)
    },
    err => {
      // Do stuff whith your error
      this.displayError(err);
    },
    () => {
      // Do stuff after completion
    }
  )
}

private displayError(ex): void {
    console.log(ex);
}
...