Перенаправление 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
ложно