Javascript Express 4+;角度2 HTML5路由问题

Javascript Express 4+;角度2 HTML5路由问题,javascript,node.js,express,routing,angular,Javascript,Node.js,Express,Routing,Angular,我正在用Express 4和Angular 2制作一个基本的web应用程序。在这里,除了我正在使用它的HTML5路由器之外,Angular 2没有什么特别的 以下是应用程序的路由工作流程: 该应用程序有两种主要的服务器端路由配置。两者看起来都很相似: /* GET home page. */ router.get('/', authenticationHelpers.isAuth, function(req, res, next) { res.render('index'); }); /*

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

以下是应用程序的路由工作流程:

该应用程序有两种主要的服务器端路由配置。两者看起来都很相似:

/* 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');
});
它们明确地管理用户路由到
/
/login
的两种情况

但是,如果用户已登录并能够访问
/
以呈现index express视图,则用户可以利用HTML5路由。其中包括如下URL:

localhost:5000/user
localhost:5000/profile
localhost:5000/profile/settings
问题 显然没有
路由器。get('/user')
,也不应该有,因为这是Angular 2路由器完成的所有前端工作。然而,要启用链接,允许用户只需键入
localhost:5000/profile/settings
,并让站点将您发送到索引文件(假设您已登录),然后将您(使用angular 2的HTML 5路由)发送到您自己的
/profile/settings
,我必须将这段代码放入我的
app.js

app.all("/*", function(req, res, next) {
  res.render('index');
});
但这给了我一个大问题。如果您未登录,并且获得了链接
localhost:5000/profile/settings
,它将呈现索引视图,因为它只在上面的
router.get('/')
路由代码上运行
authenticationHelpers.isAuth
函数。我还希望能够在express或angular中不存在的路由上抛出404个错误

然而,在我看来,要启用此功能,express必须了解所有HTML5路由选项以及express路由选项。对我来说,这打破了路由关注点之间的分离,因为如果我更改了HTML5角度路由,我还必须在express中进行更改(很可能,查看下面的解决方案)。我想要所有这些功能,但是如果没有路由处理程序之间的信息泄漏,我根本看不到解决方法。如果有人能帮我找到更好的方法,那就太好了!如果信息共享或与快速路线的角度路线是我开发最优化精益解决方案的唯一方式,我可以在下面:

势解
将此添加到所有路线的末尾

app.all("/*", authenticationHelpers.isAuth, function(req, res, next) {
  res.render('index');
});
应该能解决你的问题

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