javascript - Observables的Angular HttpClient默认错误函数
问题描述
在后端,我创建了一个很好的异常机制,所以当请求失败时。服务器将向客户端发送一条带有一些错误代码的漂亮错误消息。
像这样:
@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);
}
我读了这篇关于扩展 HttpClient 的文章。
但这对我来说还不够,它只是定义一个default
"API_HOST"
我想为请求方法返回对象定义默认错误函数,它们是 Observables。
有没有像扩展一样操作“HttpClient请求方法”的返回对象?
解决方案
您可以使用为此而设计的新HTTPClient 拦截器。
这是一个示例:
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 请求中,都会运行这个拦截器,并且会按照你告诉它的方式运行。在这种情况下,它会记录错误,但你可以让他做任何你想做的事。
推荐阅读
- python - 如何 JSON 序列化对象并在排除函数的同时包含 @property 属性?
- javascript - JavaScript:调用存储在变量中的函数时访问“this”
- python-3.x - 与sklearn拆分后如何重新合并X_test和y_test以及x_train和y_train?
- c++ - Concert 技术中的列智能建模 - 列生成
- c - 如何知道文件的类型?
- python - 合并财务数据
- java - 如何在以蛇形式打印数组时处理 ArrayIndexOutofBounds
- shell - 在 Ubuntu EC2 上构建 Docker 容器时,NPM 安装总是在同一个地方失败
- laravel - Laravel 存储库类 App\Repository\User 不存在
- php - 如何计算 24 小时制 H:i 时间之间的差异?