gpt4 book ai didi

Angular:拦截 HTTP 错误并继续链

转载 作者:行者123 更新时间:2023-12-04 01:29:47 25 4
gpt4 key购买 nike

我想将某些 HTTP 错误代码视为非错误,并正常处理它们的响应。所以我尝试添加一个 HttpInterceptor 来捕获 500 个状态代码,并返回原始响应(Angular 将其放入 error.error):

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
catchError((error: HttpErrorResponse) => {
if (error.status === 500) {
return of(error.error);
} else {
return throwError('server error');
}
})
);
}

但是如果出现错误,我通过管道传输到 http 请求的任何内容都不会执行。例如,如果我这样做,日志语句不会发生:

this.http.get(...).pipe(
tap(console.log)
)

我怎样才能让它工作?

这是一个 sample ...它从不记录来自 AppComponent 的“得到的结果”。

最佳答案

自 Angular http 模块 filters 以来,您的链停止工作它从拦截器接收到的消息:

const res$: Observable<HttpResponse<any>> = <Observable<HttpResponse<any>>>events$.pipe(
filter((event: HttpEvent<any>) => event instanceof HttpResponse));

如您所见,您应该返回 HttpResponse 类的流,如下所示:

import { HttpResponse, ... } from '@angular/common/http';
...

if (error.status === 404) {
console.log('caught', error.error);

return of(new HttpResponse({
body: error.error
}));
}

Forked Stackblitz

关于Angular:拦截 HTTP 错误并继续链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61275528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com