我正在使用Sails.js和Angular 2.我想在Angular 2中使用默认的HTML5路径策略。要使用Express服务器,我以前做过,我需要让每条路线都没有。与api调用有关,返回主页视图。所以在快递中,它会是这样的:
app.get('*', function(req, res) {
res.render('index');
});
我知道这有效,因为我目前正在另一个项目中使用它。有了这个,当我转到domain.com/some/route
时,服务器返回正确的视图。如果您没有路由的通配符,则它不能与URL匹配,也不会返回任何内容。在我的另一个项目中,我还使用身份验证中间件来检查每个API调用上的JWT,而不是索引调用。通过这种方式,Angular 2应用程序可以处理登录并仍显示某些内容。
话虽如此,我认为Sails.js的方式类似。这里的不同之处在于我们正在使用OpenID Connect,并且该服务器是独立的,并且在那里进行身份验证。我在config/routes.js
中配置了路由,当我在列表顶部有以下路由(返回主页布局视图)时,它们运行良好:
'/': 'HomeController.index'
然后当路径完全匹配时,它返回右视图。但是,我的Angular 2应用程序需要使用哈希定位策略。我尝试将该路线移动到路线列表的底部并将其更改为:
'/*': 'HomeController.index'
但是当我的应用程序尝试使用passport-openidconnect进行授权时,我在浏览器中收到一条错误消息,指出浏览器已重定向太多次。终端中没有显示任何内容,在授权完成后我甚至没有点击auth服务器或回调函数。
我认为这很简单;我跟随directions explained here,但他们没有工作。还有其他人有同样的问题吗?提前感谢您的帮助。
答案 0 :(得分:0)
看起来护照优先并自行重定向 - 可能是因为它安装在您的HTTP中间件(请参阅config / http.js)或保护HomeController.index
的策略中。如果您暂时注释掉Passport,我的猜测是一切都会按预期工作。假设这是真的,那么您将想要深入了解重定向循环的来源(在护照或其他应用程序逻辑或策略中)。
特别需要注意的一点是:如果在策略中安装了Passport,那么您将确保未设置策略来保护您的catchall路由。
此外,请注意,您可能希望将
skipAssets: true
添加到您的catchall路线,以便您能够提供CSS,图片等等 - 除非您拥有所有这些在其他地方托管(但即便如此,您还要考虑favicon.ico
,robots.txt
和sitemap.xml
)。