5

我正在实现一个路由保护(CanActivate 接口),我需要在某些条件下重定向到未找到的页面。这可以通过以下语句来实现:

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

这可行,但会引发服务器端异常(错误:发送后无法设置标头),因为无论重定向如何,angular2-universal 仍会发送呈现的页面。

有没有办法正确解决这个问题?

提前致谢。

4

1 回答 1

2

实际上有一个绕过错误的解决方案。

在方法server.tsres.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为 false 时才发送 html。

于 2017-10-10T13:39:17.470 回答