Uncaught TypeError: Невозможно прочитать свойство 'ngOriginalError' из undefined в getOriginalError - когда httpClient вернул строку - PullRequest
0 голосов
/ 06 марта 2019

Когда я пытался вызвать API с помощью HttpClient , который возвращает строку, был вызван обработчик ошибок метода подписки.

Код переднего плана:

this.httpClient.get<string>(`${this.baseUrl}/account/getname`).subscribe(
      (accountName)=> console.log(accountName),
      () => console.log("Failure")
    ); 

BackendКод в контроллере:

[HttpGet]
public string GetName()
{               
   return "Sample Account Name";
 }

Код переднего конца будет записывать «Failure» на консоли.

Если метод уведомления об ошибке удален из subscribe(), возникает следующая ошибка

Uncaught TypeError: Невозможно прочитать свойство 'ngOriginalError' из undefined в getOriginalError

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Uncaught TypeError: Невозможно прочитать свойство 'ngOriginalError' из неопределенного при getOriginalError

Это происходит из-за того, что ответ со стороны сервера идет как ошибка, а обработчик ошибки отсутствует. Я думаю, решение всегда обрабатывает ошибку при выполнении http запроса HttpClient:

import { catchError } from 'rxjs/operators';

makeHttpRequest(url): Observable<any> {
  return this.httpClient.get(url)
   .pipe(
     catchError(err => console.log(err))
   );
}

makeHttpRequest(`${this.baseUrl}/account/getname`).subscribe(
  (accountName) => console.log(accountName);
); 
0 голосов
/ 06 марта 2019

Поскольку тип ответа по умолчанию для HttpClient - JSON , ожидается, что объектом ответа будет значение json.

Но наш ответ был string .Это было причиной ошибки.

Когда API возвращает данные не в формате JSON, нам нужно указать их, используя опцию responseType в запросе get.

Существуют различные варианты, такие как'blob', 'text', 'arraybuffer', 'json'

Для приведенного выше случая, если мы не задаем параметр типа вызова get в виде строки (get<string>), нам просто нужно установить responseType как {responseType : 'text'}

return this.httpClient.get(`${this.baseUrl}/account/getname`, 
       {responseType : 'text' }).subscribe(
             (data)=> console.log(data),
             () => console.log("Failure")
       ); 

Но если мы укажем параметр типа вызова get в виде строки, будет ошибка

Type '"text "'нельзя назначить типу" json "

Во избежание этого нам нужно изменить параметр requestType на {responseType : 'text' as 'json'}

 return this.httpClient.get<string>(`${this.baseUrl}/account/getname`, 
        {responseType : 'text' as 'json'}).subscribe(
             (data)=> console.log(data),
             () => console.log("Failure")
        ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...