Могу ли я перенаправить страницу с ошибкой с HttpInterceptor в angular

#angular #routes

Вопрос:

Я использую Angular 8, и у меня есть HttpInterceptor, который перехватывает каждый вызов API в моем приложении. Для обработки ошибок и маршрутизации на /error/401 страницу в случае, если API возвращает HTTP 401.

Я использовал this.route.navigate(['error', responseCode]); в методе перехвата. У меня есть следующий маршрут в модуле приложения

 {  path: 'error/:responseCode',  component: ErrorPageComponent  }  

URL-адрес обновляется /error/401 , но компонент не запускается. Однако, если я обновлю браузер, компонент ErrorPageComponent загружается и отображается сообщение.

Комментарии:

1. Вы проверили консоль на наличие ошибок? Или вы используете changedetection стратегию?

2. Ошибок консоли нет.

3. Можете ли вы поделиться кодом компонента ошибки?

4. export class ErrorPageComponent implements OnInit { errorCode: string; constructor( private activatedRoute: ActivatedRoute ) { } ngOnInit() { this.activatedRoute.snapshot.url[1].toString(); // errorMessage display logic } }

5. Это сработало нормально, после изменения некоторой логики в нашем html, который загружал данные только после получения некоторого ответа API, который не удался из-за HTTP 503.

Ответ №1:

Поскольку я потратил некоторое время на изучение этого вопроса, я хотел бы ответить на этот вопрос сам.

Можно перенаправить на страницу с ошибкой на основе кода состояния перехватчика. Я сделал следующее, и это сработало.

 constructor(private route: Router) { }  intercept(req: HttpRequestlt;anygt;, next: HttpHandler): Observablelt;HttpEventlt;anygt;gt; { .... this.route.navigate(['error', responseCode]);  

Кроме того, в модуле маршрутизации приложений добавлен приведенный ниже фрагмент кода.

 {  path: 'error/:id',  component: ErrorPageComponent  }