Angular 2 Universal 404 Not Found 重定向

Jos*_*ina 5 angular2-universal

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

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

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

有什么办法可以正确解决这个问题吗?

提前致谢。

pbi*_*gal 2

实际上有一个解决方案可以绕过该错误。

在方法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);
      }
    });
});
Run Code Online (Sandbox Code Playgroud)

显然,只有当为 false 时才发送 html res.headersSent。