Извините за заголовок, но я не смог найти лучшего.
Я вызываю HTTP API, который возвращает объект json при отправке команды GET, но он возвращает 404, если ресурс не был найден. Я использую Angular 9 и пытаюсь найти способ вывести объект json из сервиса или вернуть значение enum полученной ошибки HTTP на том же Observable.
Пожалуйста, см. следующий код:
device.service.ts
getDevice(objectID: number | string): Observable<Device | ResponseStatus> {
return this.http.get<Device>(`http://localhost:8080/Registration/Device/${objectID}`)
.pipe(
catchError(this.handleError)
);
}
handleError(error: HttpErrorResponse): Observable<ResponseStatus> {
switch (error.status) {
case 404: {
return of(ResponseStatus.objectNotFound);
break;
}
case 409: {
return of(ResponseStatus.objectAlreadyExists);
break;
}
}
}
I wi sh для возврата ResponseStatus моим компонентам, поэтому я могу обрабатывать все ошибки одинаково .
device-item-resolver-service.ts
export class DeviceItemResolverService implements Resolve<Device> {
constructor(private ds: DeviceService, private router: Router) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Device> | Observable<never> {
let objectID = route.paramMap.get('objectID');
return this.ds.getDevice(objectID).pipe(
take(1),
mergeMap(
(item: Device) => {
if (item) {
return of(item);
}
else {
this.router.navigate(['/devices']);
return EMPTY;
}
}
)
);
}
}
Очевидно, все идет хорошо. Запустив программу, я могу получить Устройство, но не могу найти способ обработки ResponseStatus на распознавателе.
Пожалуйста, не могли бы вы мне помочь?