未捕获的TypeError:无法读取getOriginalError处未定义的属性'ngOriginalError'-当HTTPClient返回字符串时

时间:2019-03-06 09:21:41

标签: angular

当我尝试使用返回字符串的HttpClient调用API时,调用了subscription方法的错误处理程序。

前端代码:

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

控制器中的后端代码:

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

前端代码会将“ Failure”登录到控制台。

如果从subscribe()中删除了错误通知方法,则会发生以下错误

  

未捕获的TypeError:无法读取的属性'ngOriginalError'   在getOriginalError上未定义

3 个答案:

答案 0 :(得分:1)

  

未捕获到的TypeError:无法读取getOriginalError处未定义的属性'ngOriginalError'

之所以发生这种情况,是因为来自服务器端的响应是一个错误,并且没有错误处理程序。我想,通过HttpClient发出http请求时,解决方案始终是处理错误:

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);
); 

答案 1 :(得分:0)

由于HttpClient的默认响应类型为 JSON ,因此它期望响应对象为json值。

但是我们的答复是字符串。 这就是错误的原因。

当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调用的类型参数指定为字符串,则会出现错误

  

类型'“ 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")
        ); 

答案 2 :(得分:0)

请检查您的http方法(post / get / put)中的响应类型,因为默认情况下它是json类型,但是有时您的响应中包含斑点或文本,则会发生这种类型的错误。

responseType ?:角形库中的'arraybuffer'|'blob'|'json'|'text'