我正在实施一个路由保护(CanActivate接口),我需要在某些条件下重定向到未找到的页面。这可以通过以下句子实现:
if (isNode){
let res : Response = Zone.current.get('res');
res.status(404).redirect('/not-found');
}else{
this.router.navigate(['not-found']);
}
这样可行,但会引发异常服务器端(错误:发送后无法设置标头),因为无论重定向如何,angular2-universal仍会发送呈现的页面。
有没有办法妥善解决这个问题?
提前致谢。
答案 0 :(得分: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);
}
});
});
显然,仅当res.headersSent
为假时才发送html。