如何将错误请求的响应对象从Angular服务返回到组件

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

API返回的响应类型以下-

export class ResponseObject{
statusCode: Number;
statusMessage: string;
response: string;
}

服务-

 singIn(user: User): Observable<ResponseObject>{
    return this._httpClient.post<ResponseObject>(`${this._svcURL}/users/signin`, user, this._httpOptions)
    .pipe(catchError(this.handleError));    
  }

  private handleError(errResponse: HttpErrorResponse){
    if(errResponse.error instanceof ErrorEvent){
      console.log("[Service] Client side error-",errResponse.error.message);
    }
    else{
      console.log("[Service]", errResponse);
    }
    return throwError("Oops! There is an issue with service. We're working on it.");
  }

Component-

loginUser(signinForm: any): void{
    let user: User = {
      email: signinForm.email,
      password: signinForm.password
    };
    console.log('[LOGIN-COMPONENT] User details ', user);

    this._moovApiService.singIn(user)
      .subscribe((response: ResponseObject) => this.responseObject = response,
      err => {
        console.log('[LOGIN-COMPONENT] ', err);
      },
      () => {
        console.log('[LOGIN-COMPONENT] Response from service ', this.responseObject);
      }
    );
  }

如果API返回成功(200,201),我可以获取ResponseObject类型的值,但是如果请求不正确(404,400),则它不会为ResponseObject返回任何值。它最终以handleError()方法结束。

我想获取组件中所有状态代码的响应,然后对其进行处理。我该怎么做?

angular express angular-services
2个回答
0
投票

如果您希望将所有HTTP状态代码都视为数据而不是错误,则需要从handleError返回一个错误的Observable。例如:

private handleError(errResponse: HttpErrorResponse){
    return Observable.of(false);
}

0
投票

我将handleError()设为public,然后执行

this._moovApiService.singIn(user).subscribe(
  (data) => this.response = data,
  (err) => this._moovApiService.handleError(err),
  //() => complete
)
© www.soinside.com 2019 - 2024. All rights reserved.