自动提供数据到Express部分视图

我正在写一个Express 4应用程序,目前我使用twig.js作为视图引擎,因为我觉得很舒服,尽pipe我可以被说服改变这个引擎。

我已经用PHP / Laravel做了很多开发,并且已经习惯了他们称之为视图composer php的阵营。 使用这些我可以为特定的视图编写一个composer php,无论是主页面视图,其他视图扩展的布局,还是其他视图都包含的视图。 作曲者会做任何必要的逻辑来准备视图需要的任何数据,然后将其附加到视图的上下文,以便在渲染过程中可用。

例如,我可能有一个显示当前用户状态的部分,所以如果他们注销,它可能只有一个loginbutton,如果他们login,它会有他们的图标,用户名和一个让他们注销的菜单等等。相应的composer php将检查用户是否login,如果是的话,将关于用户的相关数据附加到视图的上下文中。 那么哪个页面包含这个部分并不重要; 数据将始终可用,而不必记住将该特定数据添加到传递给页面主视图的上下文中。

Express有没有一些等价物? 还是取决于我使用的模板引擎?

目前,使用res.render()呈现的视图需要在每个res.render()传递其数据。 如果视图使用需要某些数据点的部分模板,则使用该模板的视图将需要通过res.render()传入该值。 因此总之,无论数据点是否可能被共享的部分模板需要,您都需要传递数据。 当使用视图引擎时,没有任何东西会自动提供给视图。

你问是否有可能有一些视图A,包括部分P_A,并能够传递一些数据到部分不依赖于路由,即无论你在网站/应用程序你的部分有数据绑定到它(完全独立于路线/url和视图)您可以使用您的login状态?

如果是这样,那么创build你的部分,让我们使用部分导航/菜单: 请注意,这个例子使用ejs模板

 <nav> <ul> <!-- pass the data upon call / include--> <% for(var i = 0, len=navigation.length;i < len;i++) {%> <li><a href="<%=navigation[i].href%>"><%=navigation[i].Text%></a></li> <%}%> </ul> </nav> 

在视图中调用/包含您的空间

view.ejs

 <%- include('nav', { navigation : [{Text : 'Items' ,href : '/' },{Text : 'People' ,href : '/names' }] } )%> 

据我所知,在expressjs中没有这样的东西。