Express 4 + Angular 2 HTML 5路由问题

我正在使用Express 4和Angular 2制作一个基本的Web应用程序。在这里,除了使用HTML 5路由器之外,没有什么特别的Angular 2。

这是应用程序的路由工作stream程:

有两个主要的服务器端路由configuration的应用程序。 两者看起来类似这样:

/* GET home page. */ router.get('/', authenticationHelpers.isAuth, function(req, res, next) { res.render('index'); }); /* GET login page. */ router.get('/login', authenticationHelpers.isNotAuth, function(req, res, next) { res.render('login'); }); 

这些pipe理显式地pipe理用户路由到//login的两种情况。

但是,如果用户login并能够访问/呈现索引快速视图,则可以使用HTML5路由。 这些包括如下的url:

 localhost:5000/user localhost:5000/profile localhost:5000/profile/settings 

问题

显然,没有router.get('/user') ,不应该有,因为这是Angular 2路由器完成的所有前端工作。 但是,要启用允许用户简单键入localhost:5000/profile/settings ,并让站点将您路由到索引文件(假设您已经login),然后路由您(使用angular2的HTML 5路由)到你自己的/profile/settings我必须把这段代码放在我的app.js

 app.all("/*", function(req, res, next) { res.render('index'); }); 

这给了我一个很大的问题,但。 如果你没有login,你会得到链接localhost:5000/profile/settings ,它将呈现索引视图,因为它只在上面的router.get('/')路由代码上运行authenticationHelpers.isAuth函数。 我也希望能够在不存在快速或angular度的路线上抛出404错误。

然而在我看来,为了使这个functionexpression,必须知道所有的HTML 5路由选项以及快速路由选项。 对我来说,这打破了路由问题的分离,因为如果我改变了HTML5的angular度路由,我也不得不做一个更改(最有可能的,查看下面的解决scheme)。 我想所有这些function,但没有这个信息泄漏之间的路由处理程序,但我根本没有看到一个方法。 如果有人能帮助我找出一个更好的方法来做到这一点,那就太棒了! 如果信息共享或高速路线的angular度路线是我开发了最优化的精益解决scheme的唯一方法,我可以在下面:

潜在的解决scheme

 router.get(['/', '/user/', '/profile/*'], authenticationHelpers.isAuth, function(req, res, next) { res.render('index'); }); 

将其添加到所有路线的末尾

 app.all("/*", authenticationHelpers.isAuth, function(req, res, next) { res.render('index'); }); 

应该解决你的问题