在后端,我创建了一个很好的异常机制,以便当请求失败时。服务器将向客户端发送一 strip 有一些错误代码的错误消息。
像这样:
@Getter
public class ErrorResponse {
/**
* Http Response status code
*/
private final HttpStatus status;
/**
* General Error Message
*/
private final String message;
private final ErrorCode errorCode;
private final Date timeStamp;
...
}
我想在每次失败时默认向用户显示错误消息。
我尝试延长 HttpClient
public get<T>(endPoint: string, options?: IRequestOptions): Observable<T> {
return this.http.get<T>(this.API + endPoint, options);
}
但它返回 Observable
在页面的大部分内容中,我正在做这样的事情:
this.client.post(WebUtils.RESOURCE_HOST + '/api' + '/actor/create', formData
).subscribe(
() => this.onSuccessfulPost(),
error => {
this.snack.error(error.error.message);
}
);
在很多页面中我都写着同样的东西:
error => {
this.snack.error(error.error.message);
}
我读了这篇文章 about extending HttpClient.
但这对我来说还不够,它只是定义一个 default
"API_HOST"
我想为请求方法返回对象定义默认错误函数,它们是 Observables。
有没有办法像扩展一样操作“HttpClient 请求方法”的返回对象?
最佳答案
您可以使用新的 HTTPClient interceptors是为此而设计的。
这是一个示例:
export class ErrorHandlerService implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next
.handle(req)
.catch((err: HttpErrorResponse) => {
console.log('error');
// Mandatory return statement
return Observable.throw(err);
}
);
}
}
在 Angular 执行的每个 HTTP 请求中,该拦截器都会运行,并且按照您指定的方式运行。在这种情况下,它会记录错误,但你可以让他做任何你想做的事。
关于javascript - Observables 的 Angular HttpClient 默认错误函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51538442/