Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 自动提供数据以表示局部视图_Node.js_Express_Partials - Fatal编程技术网

Node.js 自动提供数据以表示局部视图

Node.js 自动提供数据以表示局部视图,node.js,express,partials,Node.js,Express,Partials,我正在编写一个应用程序,目前正在使用它作为查看引擎,因为我觉得它很舒服,尽管我可能会被说服改变这个引擎 我已经用PHP/Laravel做了很多开发,并且已经习惯了他们在这个阵营中所说的。使用这些,我可以为一个特定的视图编写一个编写器,无论它是一个主页视图、一个其他视图扩展的布局,还是其他视图包含的部分布局。编写器执行任何必要的逻辑来准备视图需要的任何数据,然后将其附加到视图的上下文中,以便在渲染期间可用 例如,我可能有一个显示当前用户状态的部分,因此,如果他们注销,它可能只有一个登录按钮,如果他

我正在编写一个应用程序,目前正在使用它作为查看引擎,因为我觉得它很舒服,尽管我可能会被说服改变这个引擎

我已经用PHP/Laravel做了很多开发,并且已经习惯了他们在这个阵营中所说的。使用这些,我可以为一个特定的视图编写一个编写器,无论它是一个主页视图、一个其他视图扩展的布局,还是其他视图包含的部分布局。编写器执行任何必要的逻辑来准备视图需要的任何数据,然后将其附加到视图的上下文中,以便在渲染期间可用

例如,我可能有一个显示当前用户状态的部分,因此,如果他们注销,它可能只有一个登录按钮,如果他们登录,它将有他们的图标、用户名和允许他们注销的菜单等。相应的编写器将检查用户是否登录,如果是这样,请将有关用户的相关数据附加到视图的上下文中。那么,无论哪一页包含这部分内容;数据总是可用的,我不必记得将特定数据添加到传递到页面主视图的上下文中


快车里有等价物吗?或者它取决于我使用的模板引擎吗?

据我所知,expressjs中没有类似的东西。

目前,使用渲染的视图需要在每个
res.render()上传递数据。如果视图使用需要某些数据点的局部模板,则使用该模板的视图需要通过
res.render()
传入该值。因此,简而言之,无论可能共享的部分模板是否需要数据点,您始终需要传入数据。使用视图引擎时,不会自动向视图提供任何内容。

您是否询问是否可以拥有一些视图A,其中包括部分p_A,并能够将一些不依赖于路由的数据传递给部分,即无论您在站点/应用程序的何处,您的部分数据都与之绑定(完全独立于路由/url和视图)您可以将其用于登录状态

如果是这样,那么创建您的分部,让我们使用导航/菜单分部: 请注意,此示例使用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


在这种情况下,您会怎么做?将相同的数据附加到一整堆路由操作文件中,因为它在许多页面上使用?取决于用例。例如,如果使用Passport处理身份验证,则会向请求对象添加一个
user
属性,该属性在视图呈现的上下文中可用。如果是特定于路径(例如,与url上客户机ID为/:clientID/some stuff的客户机相关的所有页面)我建议在视图渲染的环境中使用witch,在其他情况下,路由中间件可能是一种解决方案。您是否同意在某些情况下,如我在问题中概述的情况,这似乎很尴尬?我想知道是否有更好的方法来实现它。@tremby使用Express构建的大部分网站/应用程序都使用其他framework提供数据绑定,如React或Angular(即平均堆栈)。这并不完全正确。您可以使用和。我总是在我的express应用程序中包含以下中间件:
function(req,res,next){res.locals.req=req;next();}
我不清楚这一点。它似乎没有回答这个问题,但我可能误解了它。我在询问一些特定数据的方法(生成可能涉及数据库查找之类的内容)无论何时何地包含某个局部视图,都可以用于该局部视图。在这里,您似乎只是演示如何将某些数据从父视图传递到局部视图。请澄清我是否遗漏了某些内容。您好,我想演示的是,如果您有导航,我可能会有误解igation作为一个菜单中的示例,如果您正在从数据库中提取数据,您可以有一个nav部分,如我的回答所示,并且已经在其中执行了逻辑,然后将该部分包含在实际视图中,您可以根据需要从数据库中传递数据。navigation json对象只是一个示例,这将是您的数据库对象,例如.Sti你会感到困惑吗?哦,你是说在部分视图的代码中嵌入应用程序逻辑?当然,这也取决于你喜欢在应用程序中组织/分离事物的方式……你确实可以选择在控制器中编写逻辑,并在部分视图中调用它……但是如果在代码量方面没有太多变化的话实现您想要的,您确实可以在partial中编写逻辑,在我的示例中,实际上没有逻辑,只有一个循环,这可能也适用于您。一些更接近您需要的代码片段:“loginStatusPartial”partial://to do with loggedin users//to do with loggedin users‘View’code-其中partial wi将被调用/包含:抱歉,您可能需要提取此注释,并对代码外观进行更清晰的查看。
<%- include('nav', { navigation : [{Text : 'Items' ,href : '/' },{Text : 'People' ,href : '/names' }] } )%>