Angular HttpClient:即使发生错误,如何获取原始HTTP响应

问题描述 投票:0回答:1

在使用HttpClient的Angular服务中,我创建了一个从POST返回原始HTTP响应的方法:

httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json'
    //observe: 'response'
  }),
  observe: 'response' as 'body'
};

forgotLogin(requestData: PUMRequestData): Observable<HttpResponse<string>> {
  return this.http.post<HttpResponse<string>>("http://...", requestData, this.httpOptions);

然后在我的组件中,我只是从原始的HTTP响应中查看状态和正文。

this.api.forgotLogin(pumRequestData).subscribe(response => {
  this.hStatus = response.status;
  this.hBody = response.body;
});

问题是,如果响应状态不在200系列中,则HttpClient会引发错误。在我的用例中,我只想获取请求状态和主体,而无论状态是什么,我都想根据组件中的状态而不是服务中的错误处理程序中的状态来决定要采取什么操作。我一直在尝试找到一种在服务中创建错误处理程序的棘手方法,该方法仅返回(Observable)HTTP响应,但未能做到-甚至不确定这是否是正确的方法。

所以,当状态不是200系列时,如何将原始的HTTP响应返回给我的组件?

angular httpclient http-error
1个回答
0
投票

当您订阅HTTP响应时,可以添加错误处理程序。 HttpErrorResponse对象包括从HttpErrorResponse继承的HttpHeadersstatusstatusText

HttpResponseBase在属性HttpResponseBase中可用。

[body属性可用于HttpErrorResponse.error

  • headers:HttpHeaders-所有响应头。
  • 状态:数字-响应状态代码。
  • statusText:字符串-响应状态代码的文本描述。 (不依赖于此)
  • url:字符串| null-检索到的资源的URL;如果不可用,则为HttpResponseBase
  • ok:布尔值-状态代码是否在2xx范围内。

实施例

HttpErrorResponse

错误处理程序也可以放置在RXJS null中,因此可以在订阅this.api.forgotLogin(pumRequestData).subscribe( response => { this.hStatus = response.status; this.hBody = response.body; }, (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}`); } } ); 请求之前将其嵌入。

pipe

请参见Angular HTTP文档:this.http.get<Object>(full_url, options).pipe(catchError((error: HttpErrorResponse) => { // Process error here, such as logging. ... return throwError(error) }))

© www.soinside.com 2019 - 2024. All rights reserved.