为什么我需要在后端使用像Jade或EJS这样的模板引擎?

时间:2016-09-03 07:45:18

标签: node.js pug template-engine ejs

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

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

目前我看不到任何用途。

4 个答案:

答案 0 :(得分:23)

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

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

所以这取决于你的应用程序(前端和后端)的结构如果有意义或不使用模板引擎。

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

答案 1 :(得分:8)

你实际上并不需要它们,但它们有很多功能可以使你的页面更具活力......

例如,您可以使用此代码

呈现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中,这是个坏主意。

希望这有帮助。

答案 2 :(得分:0)

视图引擎允许您使用选项呈现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,然后返回动态内容。

答案 3 :(得分:0)

快到2020年了,模板文字实际上是用来替换模板引擎的。 https://medium.com/@PaulBrowne83/do-we-really-need-template-engines-anymore-214eb6bc112e