【问题标题】:Why would I need template engines like Jade or EJS on the backend?为什么后端需要 Jade 或 EJS 等模板引擎?
【发布时间】:2017-01-11 06:53:28
【问题描述】:

我熟悉 Angularjs(1.x) 并在指令中使用模板。

目前我正在学习 nodejs,并且作为课程模板引擎的一部分被提及。在后端使用它们有什么好处?

目前看不出有什么用。

【问题讨论】:

    标签: node.js pug template-engine ejs


    【解决方案1】:

    如果您有需要呈现为 HTML 的数据(例如来自数据库),您可以使用模板引擎获取数据和模板并将其呈现为 HTML(随后提供给客户端)。

    如果您的前端应用程序执行相同操作,使用 XHR 调用或类似的方法从服务器检索数据,则呈现到 HTML 服务器端通常没有用(相反,数据作为 JSON 发送到客户端)。

    因此,使用模板引擎是否有意义取决于您的应用(前端和后端)的结构。

    还有混合解决方案,其中初始 HTML 呈现在服务器端,然后客户端“接管”。例如,这是 React 支持的。最大的想法是您可以在服务器和客户端上使用相同的组件,并且当打开页面时,用户将看到完全呈现的初始页面(而不是客户端必须检索先从后端获取数据,然后再渲染页面)。

    【讨论】:

    • 在哪种类型的应用程序后端渲染中使用。
    • @SourabhRanka 这是一篇关于 SSR(服务器端渲染)的有趣文章:medium.com/@baphemot/…
    【解决方案2】:

    您实际上并不需要它们,但它们有很多功能可以让您的页面更加动态..

    例如,您可以使用此代码仅呈现 HTML

    app.get('/',function(req,res){
      res.sendFile(path.join(__dirname+'/index.html'));
      //__dirname : It will resolve to your project folder.
    });
    

    但是使用引擎,您可以将数据发送到模板。 http://expressjs.com/en/api.html#res.render

    // pass a variable to the view
    res.render('somePage', {
        title: 'Awesome title',
        userFriends: friendsList,
        name: 'loggedUserName'
    });
    

    现在前端模板(在本例中为 EJS)将使用您发送的数据填充 html。因此 html 变得动态,您可以使每个页面对每个用户看起来都不同。

    <ul>
      <% for(var i=0; i<userFriends.length; i++) {%>
         <li><%= userFriends[i] %></li>
      <% } %>
    </ul>
    

    仅使用 HTML,您将需要进行大量不必要的 AJAX 调用来获取数据并将数据添加到 html 中,这是个坏主意。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      视图引擎允许您使用选项呈现 HTML。例如,使用squirrelly,我可以创建一个如下所示的文件:

      <!DOCTYPE html>
      <html>
        <head>
          <title>{{title}}</title>
        </head>
        <body>
         {(userIsSignedIn){<!-- if the user is signed in, display username and description-->
          <p>{{username}} is {{description}}</p>
          }}
      
          {(!userIsSignedIn){<!--if user isn't signed in, ask them to sign in-->
          <p>Sign in to view this page</p>
          }}
      
        </body>
      </html>
      

      例如,我可以使用 Express 监听动态用户配置文件 URL,然后返回动态内容。

      【讨论】:

        【解决方案4】:

        快到 2020 年了,模板字面量字面意思就是要替换模板引擎。 https://medium.com/@PaulBrowne83/do-we-really-need-template-engines-anymore-214eb6bc112e

        【讨论】:

          猜你喜欢
          • 2015-12-16
          • 1970-01-01
          • 2014-08-24
          • 1970-01-01
          • 2013-07-22
          • 1970-01-01
          • 2017-12-21
          • 1970-01-01
          • 2013-01-31
          相关资源
          最近更新 更多