2017-02-06 2 views
3

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

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

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

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

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

+0

прежде чем вы назовете перенаправление, есть ли какой-нибудь код, который выводит что-то? –

+0

Вы нашли решение? –

ответ

0

Существует фактически решение для обхода ошибки.

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

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 ложно.