web-dev-qa-db-fra.com

Pourquoi aurais-je besoin de moteurs de template comme Jade ou EJS sur le backend?

Je connais Angularjs (1.x) et utilise des modèles dans les directives.

Actuellement, j'apprends les nodejs et on mentionne les moteurs de modèles de cours. Quels sont les avantages de les utiliser sur le backend?

Actuellement, je ne vois aucune utilisation.

16
brainmassage

Si des données (provenant d'une base de données, par exemple) doivent être converties au format HTML, vous pouvez utiliser un moteur de modèle pour extraire les données et un modèle et les restituer au format HTML (qui est ensuite servi au client).

Si votre application frontale fait de même, en utilisant des appels XHR ou quelque chose de similaire pour récupérer les données du serveur, il n'est généralement pas utile de rendre le rendu au serveur HTML (les données sont envoyées au client sous forme de code JSON).

Cela dépend donc de la structure de votre application (front-end et back-end), qu'il soit logique ou non d'utiliser un moteur de templates.

Il existe également des solutions hybrides dans lesquelles le code HTML initial est rendu côté serveur, puis côté client "prend le relais". C’est quelque chose que, par exemple, React soutient. L’idée principale est que vous pouvez utiliser les mêmes composants sur le serveur et sur le client, et que lorsqu’une page est ouverte, l’utilisateur obtiendra une page initiale entièrement rendue (au lieu que le côté client ait à récupérer le les données du backend d'abord, puis le rendu de la page).

22
robertklep

En fait, vous n'en avez pas besoin, mais ils ont beaucoup de fonctionnalités qui rendent vos pages plus dynamiques.

Par exemple, vous pouvez rendre uniquement du code HTML en utilisant ce code 

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

Mais avec les moteurs, vous pouvez envoyer des données au modèle. http://expressjs.com/fr/api.html#res.render

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

Et maintenant, les modèles front-end (EJS dans ce cas) vont remplir le code HTML avec les données que vous avez envoyées. Le code HTML est donc devenu dynamique et vous pouvez donner à chaque page une apparence différente pour chaque utilisateur. 

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

Avec seulement le HTML, vous aurez besoin de faire beaucoup d'appels AJAX inutiles pour obtenir et ajouter des données en HTML, ce qui est une mauvaise idée. 

J'espère que cela t'aides.

8
Mykola Borysyuk

Un moteur de vue vous permet de rendre le HTML avec des options. Par exemple, en utilisant squirrelly , je peux créer un fichier qui ressemble à ceci:

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

Je pourrais donc écouter, par exemple, une URL de profil utilisateur dynamique avec Express, puis renvoyer du contenu dynamique.

0
Ben Gubler