Как исправить проблему canLoad, когда мы возвращаем наблюдаемое с исключением 404
Я пытаюсь вызвать API в событии canLoad для модуля в моем угловом приложении,
Хотя этот API недоступен и выдает 404 в сети, моя страница все еще загружается. Я хотел избежать этой ситуации, если есть 404, то я хотел перенаправить свою страницу на страницу с ошибкой.
canLoad(route: Route, segments: UrlSegment[])
{
return this.http.get('testapi/getacces').pipe(map((response: boolean) => {
if (response) {
return true;
} else {
this.router.navigate(['/error']);
return false;
}
}));
}
Здесь, если API представляет, тогда мой код работает должным образом, но проблема заключается только в том, когда есть 404. Итак, я ожидаю блок, который может обработать исключение для маршрутизации на страницу ошибки на исключении 404.
1 ответ
Попробуйте использовать catchError()
оператор, который будет обрабатывать вашу ситуацию при появлении ошибки вместо правильного ответа.
Смотрите пример:
canLoad(route: Route, segments: UrlSegment[]) {
return this.http.get('testapi/getacces').pipe(
map((response: boolean) => {
if (response) {
return true;
} else {
this.router.navigate(['/error']);
return false;
}
}),
catchError((error) =>
of(error).pipe(
map(() => {
this.router.navigate(['/error']);
return false;
}),
),
),
);
}
Это полезно, потому что 404 является ответом об ошибке, который не будет происходить внутри map
, но прибудет внутрь catchError
, так что вы можете обрабатывать ответ об ошибке, как вы хотите.