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

25

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

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

目前我看不出任何用途。

4个回答

37

如果你有需要转换成HTML的数据(比如从数据库中获取的数据),你可以使用模板引擎将数据和模板结合起来,然后生成HTML文件(最终会传输给客户端)。

如果你的前端应用程序通过XHR调用或类似方法从服务器上获取数据,那么在服务器端渲染HTML通常是没有意义的(相反,数据以JSON格式发送给客户端)。

因此,是否使用模板引擎取决于应用程序(前端和后端)的结构以及具体情况。

也有一些混合解决方案,即通过服务器端渲染初始HTML,然后由客户端接管。例如,React支持这种方案。其主要思想是可以在服务器端和客户端同时使用同一组件,在打开页面时,用户可以看到完全呈现的初始页面(而不是客户端首先从后端检索数据,然后再呈现页面)。


在哪种类型的应用程序中使用后端渲染? - Sourabh Ranka
@SourabhRanka 这是一篇关于 SSR(服务器端渲染)的有趣文章:https://medium.com/@baphemot/whats-server-side-rendering-and-do-i-need-it-cb42dc059b38 - robertklep

10

实际上你不需要它们,但它们有许多功能可以使你的页面更加动态。

例如,你可以用这段代码来渲染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 中,这是个不好的主意。
希望能对你有所帮助。

1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接