簡體   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