繁体   English   中英

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

[英]How to return response object for bad request from Angular service to component

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.");
  }

零件 -

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() 方法中。

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

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

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

我会将handleError() public并执行

this._moovApiService.singIn(user).subscribe(
  (data) => this.response = data,
  (err) => {
    this._moovApiService.handleError(err)
    this.response = // put any value you want here
  },
  //() => complete
)

在订阅前捕获错误。

loginUser(signinForm: any): void {
        let user: User = {
            email: signinForm.email,
            password: signinForm.password
        };

        console.log('[LOGIN-COMPONENT] User details ', user);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM