如何 return 从 Angular 服务到组件的错误请求的响应对象
How to return response object for bad request from Angular service to component
API return 低于响应类型 -
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 return 成功 (200, 201),我可以获取 ResponseObject 类型的值,但如果是错误请求 (404, 400),则不会return ResponseObject 的任何值。它以 handleError() 方法结束。
我想获得组件中所有状态代码的响应,然后对其进行处理。我该怎么做?
如果您希望所有 HTTP 状态代码都被视为数据而不是错误,您需要 return 来自您的 handleError
的错误 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);
});
}
API return 低于响应类型 -
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 return 成功 (200, 201),我可以获取 ResponseObject 类型的值,但如果是错误请求 (404, 400),则不会return ResponseObject 的任何值。它以 handleError() 方法结束。
我想获得组件中所有状态代码的响应,然后对其进行处理。我该怎么做?
如果您希望所有 HTTP 状态代码都被视为数据而不是错误,您需要 return 来自您的 handleError
的错误 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);
});
}