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

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

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

目前我看不到任何用途。

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

如果您的前端应用程序执行相同的操作,使用XHR调用或类似的方法从服务器中检索数据,那么向HTML服务器端渲染(而不是将数据作为JSON发送到客户端)通常是无用的。

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

还有混合的解决scheme,其中最初的HTML被呈现在服务器端,然后客户端“接pipe”。 例如,这是React支持的。 有一个很大的想法,就是你可以在服务器和客户端上使用相同的组件,当打开一个页面时,用户将看到一个完全呈现的初始页面(而不是客户端检索来自后端的数据,然后渲染页面)。

你实际上不需要它们,但是它们有很多让你的页面更加dynamic的function。

例如,您可以使用此代码呈现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变得dynamic,你可以使每个页面看起来不同的每个用户。

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

只用HTML,你将需要做很多不必要的AJAX调用来获取和添加数据到html这是一个坏主意。

希望这可以帮助。

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

 <!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来监听dynamic用户configuration文件URL,然后返回dynamic内容。