Angular 2 Universal 404 Not Found 重定向

Posted

技术标签:

【中文标题】Angular 2 Universal 404 Not Found 重定向【英文标题】:Angular 2 Universal 404 Not Found redirection 【发布时间】:2017-06-23 08:47:18 【问题描述】:

我正在实现一个路由保护(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);
      
    );
);

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

【讨论】:

以上是关于Angular 2 Universal 404 Not Found 重定向的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 Universal - 使用手写笔和 pug 模板的服务器端渲染

Angular 8 Universal Build 在 SCSS 导入上失败

将 Angular 2/3/4/5/6 项目转换为 Angular Universal

Angular 2 Universal ng2-bootstrap 不工作 Safari

php 使用Universal Analytics跟踪404错误

当网站上的文档过时时如何安装 Angular2 Universal?