it-swarm.com.de

Warum brauche ich Template-Engines wie Jade oder EJS im Backend?

Ich kenne Angularjs (1.x) und verwende Vorlagen in Direktiven.

Momentan lerne ich nodejs und als Teil des Kurses werden Template Engines erwähnt. Was sind die Vorteile der Verwendung im Backend?

Zur Zeit kann ich keine Verwendung sehen.

16
brainmassage

Wenn Sie Daten haben (z. B. aus einer Datenbank), die in HTML gerendert werden müssen, können Sie eine Vorlage-Engine verwenden, um die Daten und eine Vorlage in HTML (das anschließend an den Client gesendet wird) zu rendern.

Wenn Ihre Frontend-App dasselbe tut, indem Sie XHR-Aufrufe oder ähnliches verwenden, um die Daten vom Server abzurufen, ist es im Allgemeinen nicht sinnvoll, auf HTML-Serverseite zu rendern (stattdessen werden die Daten als JSON an den Client gesendet).

Es hängt also davon ab, wie Ihre App (Frontend und Backend) strukturiert ist, ob es sinnvoll ist, eine Template-Engine zu verwenden oder nicht.

Es gibt auch Hybridlösungen, bei denen der anfängliche HTML-Code serverseitig gerendert wird und dann die Clientseite "übernimmt". Dies wird beispielsweise von React unterstützt. Die große Idee dabei ist, dass Sie dieselben Komponenten sowohl auf dem Server als auch auf dem Client verwenden können. Wenn eine Seite geöffnet wird, wird dem Benutzer eine vollständig gerenderte Anfangsseite angezeigt (anstatt dass die Clientseite die Daten vom Backend zuerst und dann das Rendern der Seite).

22
robertklep

Sie brauchen sie eigentlich nicht, aber sie haben viele Funktionen, die Ihre Seiten dynamischer machen.

Zum Beispiel können Sie mit diesem Code nur HTML-Dateien darstellen 

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

Mit Engines können Sie jedoch Daten an die Vorlage senden. http://expressjs.com/de/api.html#res.render

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

Und nun werden Front-End-Vorlagen (in diesem Fall EJS) HTML-Daten mit den von Ihnen gesendeten Daten füllen. Dadurch wurde HTML dynamisch und Sie können festlegen, dass jede Seite für jeden Benutzer anders aussieht. 

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

Mit nur HTML müssen Sie eine Menge unnötiger AJAX -Aufrufe machen, um Daten in HTML zu laden und hinzuzufügen, was eine schlechte Idee ist. 

Hoffe das hilft.

8
Mykola Borysyuk

Eine View Engine ermöglicht das Rendern von HTML mit Optionen. Mit squirrelly kann ich beispielsweise eine Datei erstellen, die wie folgt aussieht:

<!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 könnte ich beispielsweise mit Express eine dynamische Benutzerprofil-URL abhören und dann dynamischen Inhalt zurückgeben.

0
Ben Gubler