Я думаю, что невозможно получить тело из экземпляра HttpErrorResponse, так как он расширяет HttpResponseBase, у которого нет свойства тела, как у обычного HttpResponse.
export declare class HttpErrorResponse extends HttpResponseBase implements Error {
readonly name: string;
readonly message: string;
readonly error: any | null;
/**
* Errors are never okay, even when the status code is in the 2xx success range.
*/
readonly ok: boolean;
constructor(init: {
error?: any;
headers?: HttpHeaders;
status?: number;
statusText?: string;
url?: string;
});
}
Что я сделал, так этоиспользуйте Response Incerceptor:
import { Injectable } from '@angular/core';
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { ResponseBusiness } from '../Models/General/ResponseBusiness.model';
import { MsgService } from '../services/msg.service';
import { AlertService } from '../services/alert.service';
@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
constructor(private _msg: MsgService, private _alertService: AlertService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).map(resp => {
const response = <HttpResponse<ResponseBusiness<Object>>> resp;
if (resp instanceof HttpResponse) {
}
/* do whatever you need with the req.body */
if (resp instanceof HttpErrorResponse) {
const body = JSON.parse(req.body);
if (body && body.avoidMsg) {
return resp;
}
}
if (response.status === 200 && !response.body.result.status) {
this._msg.setMsg({message: `${response.body.result.codeNumber} ${response.body.result.codeDescription}`, tipo: 'error'});
}
return resp;
});
}
}
Затем добавьте inteceptor к вашему app.module следующим образом:
providers: [
{provide: HTTP_INTERCEPTORS, useClass: ResponseInterceptor, multi: true}],