Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am familiar with Angularjs(1.x) and use templates in directives.

Currently I am learning nodejs and as a part of the course template engines are mentioned. What are the advantages of using them on the backend?

Currently I can't see any use.

like image 344
brainmassage Avatar asked Sep 03 '16 07:09

brainmassage


People also ask

Why do I need template engine?

A template engine enables you to use static template files in your application. At runtime, the template engine replaces variables in a template file with actual values, and transforms the template into an HTML file sent to the client. This approach makes it easier to design an HTML page.

Why do we need EJS template?

EJS (Embedded JavaScript Templating) is one of the most popular template engines for JavaScript. As the name suggests, it lets us embed JavaScript code in a template language that is then used to generate HTML.

Why do we need template engine in node js?

Template engine helps us to create an HTML template with minimal code. Also, it can inject data into HTML template at client side and produce the final HTML.

What is Jade template engine?

Jade is a template engine for node. js and the default rendering engine for the Express web framework. It is a new, simplified language that compiles into HTML and is extremely useful for web developers. Jade is designed primarily for server-side templating in node.


4 Answers

If you have data (say from a database) that needs to be rendered to HTML, you can use a template engine to take the data and a template and render it to HTML (which subsequently gets served to the client).

If your frontend app does the same, using XHR calls or something similar to retrieve the data from the server, it's generally not useful to render to HTML server side (instead, the data gets sent as JSON to the client).

So it depends on how your app (both frontend and backend) is structured if it makes sense or not to use a templating engine.

There's also hybrid solutions where the initial HTML is rendered server side, and then the client side "takes over". This is something that, for instance, React supports. The big idea there is that you can use the same components both on the server and on the client, and that when a page is opened, the user will get to see a fully rendered initial page (instead of the client side having to retrieve the data from the backend first and then rendering the page).

like image 178
robertklep Avatar answered Oct 19 '22 21:10

robertklep


You actually dont need them, but they have a lot of features that makes your pages more dynamic..

For example you can render just HTML using this code

app.get('/',function(req,res){
  res.sendFile(path.join(__dirname+'/index.html'));
  //__dirname : It will resolve to your project folder.
});

But with engines you can send data to template. http://expressjs.com/en/api.html#res.render

// pass a variable to the view
res.render('somePage', {
    title: 'Awesome title',
    userFriends: friendsList,
    name: 'loggedUserName'
});

And now on front-end templates(EJS in this case) will populate html with data that you send in. So html became dynamic and you can make each page looks different for each user.

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

With just HTML you will need to make a lot of unnecessary AJAX calls to get and add data into html which is bad idea.

Hope this helps.

like image 24
Mykola Borysyuk Avatar answered Oct 19 '22 19:10

Mykola Borysyuk


A view engine allows you to render HTML with options. For example, using squirrelly, I can create a file that looks like this:

<!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>

So I could listen, for example, to a dynamic user profile URL with Express and then return dynamic content.

like image 1
Ben Gubler Avatar answered Oct 19 '22 19:10

Ben Gubler


It's almost 2020, Template literals are literally meant to replace template engines. https://medium.com/@PaulBrowne83/do-we-really-need-template-engines-anymore-214eb6bc112e

like image 1
Paul Browne Avatar answered Oct 19 '22 20:10

Paul Browne