如何在ExpressJS中为布局提供当前路径或视图?

时间:2011-12-31 05:47:06

标签: node.js express

我希望能够动态引用JavaScript和样式表,具体取决于用户在Express中使用的页面。我认为最好的方法(虽然我愿意接受建议)是将当前视图传递给布局页面。

例如;

给出网址http://example.com/trees

我希望在layout.jade中有一些逻辑可以说明:

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

将呈现为:

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

这样做的任何建议或最佳做法?

3 个答案:

答案 0 :(得分:4)

req.route是匹配的路由,因此req.route.path等可用,或者当然可以解析req.url。使用express 2x,您可以使用“dynamic helpers”或res.local()

自动将这些值公开给视图

答案 1 :(得分:0)

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

答案 2 :(得分:0)

简单的答案就是将所有的javascript放入一个文件中并完成它。同样适用于CSS。有关详细信息,请参阅Ruby on Rails asset pipeline。你可能会让你的生活变得比必要的复杂,并且通过在不同的页面上使用不同的javascripts来降低效率。

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

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

然后只需在模板中循环显示该模板,并为每个模板生成一个<link>标记。