为什么HTTP客户端请求以字符串而不是HttpErrorResponse的形式返回错误?

时间:2019-05-24 05:33:31

标签: angular angular-httpclient

我正在使用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 :(得分:0)

 /** 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.');

  }

答案 1 :(得分:0)

您可能会再次检查文档,因为错误消息在docs中列为字符串类型。 https://angular.io/api/common/http/HttpErrorResponse#constructor()。还要注意,服务器将状态恢复为500,您也可以考虑使用https://angular.io/api/common/http/HttpInterceptor

答案 2 :(得分:0)

我发现了问题,我忘记了我有一个拦截器正在更改错误。如果还有其他人像我一样健忘,请检查您的拦截器!