如何在ExpressJS中提供当前的路线或视图?

我希望能够dynamic参考JavaScript和样式表,具体取决于用户在Express上的哪个页面。 我想这样做的最好方法(尽pipe我愿意提供build议)是将当前视图传递给布局页面。

例如;

给定urlhttp://example.com/trees

我想在layout.jade中有一些逻辑,它说了一些事情的效果:

script(src="/javascripts/{view}.js")

这将被呈现为:

<script src="/javascripts/trees.js"></script>

任何build议或最佳做法做到这一点?

req.route是匹配的路由,所以像req.route.path等是可用的,当然可以parsingreq.url。 使用express 2x,您可以使用“dynamic助手”或res.local()自动将这些值暴露给视图

这样做没有最佳实践,因为Express不提供像url帮助器的Rails,所以我认为你的方法是好的。

简单的答案是把所有的JavaScript放到一个单独的文件中,并完成它。 同上CSS。 有关详细信息,请参阅Ruby on Rails资产pipe道 。 您可能使您的生活比必要的更加复杂,而且通过在不同页面上使用不同的JavaScript,效率也会降低。

不过,既然你问了,那么javascripts的答案很简单。 只需在视图中添加额外的<script>标签,而不是布局。 问题解决了。 CSS不能干净地工作,因为<link>标签需要在<head> 。 在这种情况下,我将我需要的样式定义为一个string数组,并在我的布局模板中循环。 所以在我的路线中,我设置了一个局部variables如

 locals.css = ['/css/one.css', '/css/two.css'] 

然后在你的模板中循环,并为每个标签生成一个<link>标签。