В угловой документации они указали, что вы должны указать observe: "response"
в предоставленных опциях, чтобы получить полный http-ответ, который я сделал здесь:
constructor(private service: new () => T,
private http: HttpClient,
private httpErrorHandler: HttpErrorHandlerService,
){
this._handleError = this.httpErrorHandler.createHandleError(this.service.name);
}
private _handleError: HandleError;
//...other code
delete(resourceNameOrId: number | string): Observable<HttpErrorResponse>{
return this.http.delete<T>(this._url + resourceNameOrId, {
observe: "response"
}).pipe(
catchError(this._handleError(`delete`, null))
);
}
Функция handleError определена в этой службе:
export type HandleError = <T> (operation?: string, result?: T) => (error: HttpErrorResponse) => Observable<T>;
@Injectable({
providedIn: 'root'
})
export class HttpErrorHandlerService {
constructor(private errorService: ErrorService, private modalService: NzModalService) { }
createHandleError = (serviceName = '') => <T> (operation = 'operation', result = {} as T) => this.handleError(serviceName, operation, result);
handleError<T> (serviceName = '', operation = 'operation', result = {} as T ){
return (error: HttpErrorResponse): Observable<T> => {
const message = (error.error instanceof ErrorEvent) ? error.error.message: `{error code: ${error.status}, body: "${error.message}"}`;
this.errorService.errorMessage = `${serviceName} -> ${operation} failed.\n Message: ${message}`;
console.error(this.errorService.errorMessage);
return of(result);
}
}
}
И это пример того, как я вызываю функцию удаления службы в компоненте:
this.service.delete(nom).subscribe(data => {
if(!this.errorService.errorMessage){
this.notificationService.success("Suppression", "L'enregistrement a été supprimée !");
}
});
Но указание observe: "response"
не сработало в моем случае, а error: HttpErrorResponse
возвращает только сообщение об ошибке, а не полный ответ:
![enter image description here](https://i.stack.imgur.com/6ff3i.png)
Я пробовал решения в этой теме: Angular 4.3.3 HttpClient: Как получить значение из заголовка ответа? , который не работал для меня, и предоставленное решение заключалось в определении наблюдения опция.
Как мне это решить?
Обновление:
Параметр наблюдений работает только тогда, когда HTTP-запрос на удаление возвращает код 200, как показано на снимке экрана ниже, но при наличии статуса ответа 404 объект ответа в этом случае равен нулю, а в функции handleError тело ответа равно единственное, к чему я могу получить доступ.
![enter image description here](https://i.stack.imgur.com/LHS0j.png)