我需要截取并修改一个HttpResponse,它是HttpErrorResponse的实例,即状态:500,状态为200,并填写其主体,这样我就可以在http.post的Observable订阅中将其作为成功的http调用进行处理。
答案 0 :(得分:1)
我设法使用以下拦截器修改了HttpErrorResponse:
export class CustomErrorHttpInterceptor implements HttpInterceptor {
constructor() {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError((httpErrorResponse: HttpErrorResponse) => {
// Customize as you wish:
const newHttpErrorResponse = new HttpErrorResponse( {
error: httpErrorResponse.error,
headers: httpErrorResponse.headers,
status: httpErrorResponse.status,
statusText: httpErrorResponse.statusText,
url: httpErrorResponse.url
});
return Observable.throw(newHttpErrorResponse);
})
);
}
}
答案 1 :(得分:0)
您可以使用map
运算符和rxjs中的catchError
来处理错误。这里的代码:
const withoutError = this.http
.get("https://httpstat.us/500")
.pipe(
catchError((error) => {
// here you can modify your error
return of(error)
})
)
.subscribe(res => {
console.log("Run, because error has modified", res.status);
}, (error) => {
console.log('Never run ...')
});
https://httpstat.us/500
始终以500状态代码进行响应。
Here,您可以看到它的工作方式。