Перенаправление Angular 2 Universal 404 Not Found

Я реализую защиту маршрута (интерфейс CanActivate), и мне нужно перенаправить на не найденную страницу при определенных условиях. Это может быть достигнуто с помощью следующего предложения:

if (isNode){
let res : Response = Zone.current.get('res');
res.status(404).redirect('/not-found');
}else{
this.router.navigate(['not-found']);
}

Это работает, но вызывает исключительную ситуацию на стороне сервера (ошибка: невозможно установить заголовки после их отправки), поскольку angular2-universal все еще отправляет отображаемую страницу независимо от перенаправления.

Есть ли способ решить это правильно?

Заранее спасибо.

1 ответ

На самом деле есть решение для обхода ошибки.

В server.ts в res.render метод добавить функцию обратного вызова и проверить res.headersSent логическое значение.

server.get('*', (req, res) => {
  res.render('../public/index.html', {req, res},
    (error, html) => {
      if(error)
        // error handle
      if (!res.headersSent) {
        res.send(html);
      }
    });
});

Очевидно, отправлять HTML, только если res.headersSent ложно

Другие вопросы по тегам