【发布时间】:2017-01-11 06:53:28
【问题描述】:
我熟悉 Angularjs(1.x) 并在指令中使用模板。
目前我正在学习 nodejs,并且作为课程模板引擎的一部分被提及。在后端使用它们有什么好处?
目前看不出有什么用。
【问题讨论】:
标签: node.js pug template-engine ejs
我熟悉 Angularjs(1.x) 并在指令中使用模板。
目前我正在学习 nodejs,并且作为课程模板引擎的一部分被提及。在后端使用它们有什么好处?
目前看不出有什么用。
【问题讨论】:
标签: node.js pug template-engine ejs
如果您有需要呈现为 HTML 的数据(例如来自数据库),您可以使用模板引擎获取数据和模板并将其呈现为 HTML(随后提供给客户端)。
如果您的前端应用程序执行相同操作,使用 XHR 调用或类似的方法从服务器检索数据,则呈现到 HTML 服务器端通常没有用(相反,数据作为 JSON 发送到客户端)。
因此,使用模板引擎是否有意义取决于您的应用(前端和后端)的结构。
还有混合解决方案,其中初始 HTML 呈现在服务器端,然后客户端“接管”。例如,这是 React 支持的。最大的想法是您可以在服务器和客户端上使用相同的组件,并且当打开页面时,用户将看到完全呈现的初始页面(而不是客户端必须检索先从后端获取数据,然后再渲染页面)。
【讨论】:
您实际上并不需要它们,但它们有很多功能可以让您的页面更加动态..
例如,您可以使用此代码仅呈现 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。例如,使用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,然后返回动态内容。
【讨论】:
快到 2020 年了,模板字面量字面意思就是要替换模板引擎。 https://medium.com/@PaulBrowne83/do-we-really-need-template-engines-anymore-214eb6bc112e
【讨论】: