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

Why would I need template engines like Jade or EJS on the backend?

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

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

目前我看不出有什么用。

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

例如,您可以使用此代码

只渲染 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,这是个坏主意。

希望这对您有所帮助。

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

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

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

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

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

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