Existe-t-il un moteur de modèle pour Node.js? [fermé]


271

J'expérimente avec la construction d'une application Web entière en utilisant Node.js. Existe-t-il un moteur de modèle similaire (par exemple) au moteur de modèle Django ou similaire qui vous permet au moins d'étendre les modèles de base?


17
Je viens de découvrir que le moteur JavaScript V8 est plus rapide que Ruby, PHP et Python. Incroyablement rapide pour un langage dynamique. Plus lent que Java et C #, cependant.
Nosredna

77
@Nosredna: Comment Java peut-il être plus rapide qu'autre chose?! ;)
Daniel Sloof

27
@Daniel Java est en fait assez rapide ces jours-ci, battant tout sauf Ada, C et C ++ dans les benchmarks Shootout de Debian.
Mentalikryst

20
Quiconque ne se soucie pas de la syntaxe, de la productivité et de tout autre chose que des performances devrait utiliser Raphters (framework web pour C)
Pablo B.

6
node.js ne concerne pas la langue. Tout dépend de la conception et de la façon dont js gère les E / S, ce qui est génial. Vous pourriez faire tourner rapidement les frameworks web ruby ​​si vous repensiez ses bibliothèques d'E / S.
julx

Réponses:



52

Vous devriez pouvoir utiliser moustache.js, si cela ne fonctionne pas, envoyez-moi les problèmes et je le réparerai car je suis sur le point de les utiliser dans node.js de toute façon.

http://github.com/janl/mustache.js

Je sais que cela fonctionne sans DOM car un tas d'applications autonomes CouchDB l'utilisent dans un serveur de vue Spidermonkey.


3
Il existe également un article de blog sur l'utilisation de Moustache et Underscore avec Node.js: boldr.net/create-a-web-app-with-node
MKroehnert

@MKroehnert le lien est rompu
yukashima huksay

40

Si vous aimez le haml, mais que vous voulez quelque chose de mieux, consultez http://jade-lang.com pour le nœud, j'ai également écrit haml.js :)


4
Jade est plutôt cool. Je viens de commencer à l'utiliser, donc je ne peux pas parler de ses performances, mais j'aime la syntaxe. Et le support intégré dans Express est un plus.
broofa

3
les performances sont suffisantes, les modèles doivent quand même être mis en cache. De plus, n'oubliez pas de mettre à l'échelle horizontalement, pas verticalement, sinon vous pourriez tout aussi bien ne pas utiliser de moteur de modèle du tout et juste quelques fonctions / concats
tjholowaychuk

14

Il y a tout le temps de nouveaux moteurs de création de modèles.

underscore.js ajoute beaucoup de support de programmation fonctionnelle à js, et a des modèles.

Et aujourd'hui, j'en ai entendu parler: http://github.com/SamuraiJack/Shotenjin-Joosed


6
Bravo pour underscore.js. Bibliothèque géniale, je l'utilise aussi bien pour mon côté client que pour le travail node.js. Leur moteur de modèle est basé sur le moteur JS Micro Templating de John Resig ( ejohn.org/blog/javascript-micro-templating ) que j'ai utilisé plusieurs fois auparavant. Afaik est votre meilleure option à ce stade lorsque vous travaillez avec node.js.
Felix Geisendörfer

2
Est-ce que l'un de ces éléments supporte l'héritage?
Nick Retallack

1
@Nick jinjs semble prendre en charge l'héritage, voir la première ligne: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore

13

Vous devriez jeter un œil à node-asyncEJS , qui est explicitement conçu pour prendre en compte la nature asynchrone de node.js. Il autorise même des blocs de code asynchrones à l'intérieur du modèle.

Voici un exemple de la documentation:

<html>
  <head>
    <% ctx.hello = "World";  %>
    <title><%= "Hello " + ctx.hello %></title>
  </head>
  <body>

    <h1><%? setTimeout(function () { res.print("Async Header"); res.finish(); }, 2000)  %></h1>
    <p><%? setTimeout(function () { res.print("Body"); res.finish(); }, 1000)  %></p>

  </body>
</html>

7

Vous pouvez essayer sans barbe (il est inspiré par les soudures / plaques):

Par exemple:

{ post:
  { title: "Next generation templating: Start shaving!"
  , text: "TL;DR You should really check out beardless!"
  , comments:
    [ {text: "Hey cool!"}
    , {text: "Really gotta check that out..."}  ]
  }
}

Votre modèle:

<h1 data-template="post.title"></h1>
<p data-template="post.text"></p>
<div>
  <div data-template="post.comments" class="comment">
    <p data-template="post.comments.text"></p>
  </div>
</div>

Production:

<h1>Next generation templating: Start shaving!</h1>
<p>TL;DR You should really check out beardless!</p>
<div>
  <div class="comment">
    <p>Hey cool!</p>
  </div>
  <div class="comment">
    <p>Really gotta check that out...</p>
  </div>
</div>

Veuillez être plus descriptif dans votre réponse concernant votre code et le lien auquel vous avez fait référence. Référez: Comment répondre
Askmish

Serait intéressant, comment traiter réellement le fichier ou remplir des variables dans Node
Julian F. Weinert

6

J'ai fait un travail sur un portage assez complet du langage de modèle Django pour le projet djangode Simon Willisons (fonctions utilitaires pour node.js qui empruntent quelques concepts utiles à Django).

Voir la documentation ici .


6

J'utilise Twig avec Symfony et je joue maintenant dans node.js, donc je regarde https://github.com/justjohn/twig.js et https://github.com/paularmstrong/swig , que vous allez probablement comme si vous utilisez django.


2
TwigJS est un peu mort, GitHub dit que le dernier commit a eu lieu il y a 2 ans. Swig, quant à lui, est assez actif. J'irais pour Swig.
Darkhogg

Pour info : à partir de cet engagement le 25 juin 2015 , le github Swig prétend qu'il n'est plus maintenu . Cela pourrait changer à l'avenir, mais pour l'instant, c'est quelque chose à considérer.
radiovisuel

Nunjucks a une syntaxe très similaire, pour ce qu'elle vaut.
mwcz

5

Si vous recherchez une approche minimaliste des modèles, vous pouvez consulter le modèle JSON .

Une alternative plus complète est EJS . C'est un peu plus semblable à quelque chose que vous obtiendriez de Django.

Votre kilométrage peut varier pour chacun d'entre eux - ils sont conçus pour un environnement Javascript de navigateur, et non Node.js.


2
Ce n'est pas du tout similaire aux modèles de Django, car les modèles de Django ont une bonne documentation. EJS est une tâche difficile à franchir et vous finirez par lire son code source juste pour comprendre ce qui est à votre disposition.

5

AVERTISSEMENT: JinJs n'est plus maintenu. Il fonctionne toujours mais n'est pas compatible avec la dernière version d'express.

Vous pouvez essayer d'utiliser jinjs . C'est un portage de la Jinja, un très bon système de création de modèles en Python. Vous pouvez l'installer avec npm comme ceci:

npm install jinjs

dans template.tpl:

I say : "{{ sentence }}"

dans votre template.js:

jinjs = require('jinjs');
jinjs.registerExtension('.tpl');
tpl = require('./template');
str = tpl.render ({sentence : 'Hello, World!'});
console.log(str);

La sortie sera:

I say : "Hello, World!"

Nous le développons activement, une bonne documentation devrait bientôt arriver.


4

haml est un bon choix pour node.js

http://github.com/creationix/haml-js

haml-js

!!! XML
!!! strict
%html{ xmlns: "http://www.w3.org/1999/xhtml" }
  %head
    %title Sample haml template
  %body
    .profile
      .left.column
        #date= print_date()
        #address= current_user.address
      .right.column
        #email= current_user.email
        #bio= current_user.bio

html

<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Sample haml template
</title></head><body><div class="profile"><div class="left column"><div id="date">January 1, 2009
</div><div id="address">Richardson, TX
</div></div><div class="right column"><div id="email">tim@creationix.com
</div><div id="bio">Experienced software professional...
</div></div></div></body></html>




2

Avez-vous essayé PURE ?
Si vous essayez, n'hésitez pas à publier tout problème que vous pourriez rencontrer sur le forum

Bien qu'il ait été principalement conçu pour le navigateur, il fonctionne bien avec Jaxer et Rhino.

Je ne connais pas encore node.js mais si vous pouvez mettre en cache certains JS et fonctions en mémoire, la vitesse devrait être encore plus impressionnante.


Node.js ne comprend pas DOM ... PURE utilise le DOM, mais puisqu'il en fait des chaînes. C'est intéressant à étudier. Désolé pour le bruit.
Mic


2

Essayez également Yajet . ;-) C'est une nouvelle que je viens de publier hier, mais je l'utilise depuis un moment maintenant et elle est stable et rapide (les modèles sont compilés en fonction JS native).

Il a IMO la meilleure syntaxe possible pour un moteur de modèle, et un ensemble de fonctionnalités riche malgré sa petite taille de code (8.5K minifié). Il a des directives qui vous permettent d'introduire des conditions, d'itérer des tableaux / hachages, de définir des composants de modèle réutilisables, etc.


Mishoo de travail intéressant et agréable. At-il un avantage sur EJS?
trusktr

0

J'ai trouvé hogan.js sur Twitter et recommandé par Tim O'Reilly sur son site. Je n'ai aucune meilleure pratique avec cela, mais j'ai confiance sur Twitter et O'Reilly. Tu devrais essayer...




-1

Vous pouvez utiliser dojox.dtl de DojoToolkit.org. Notez que dojo 1.7 peut bien fonctionner sur NodeJS et fonctionner comme une bibliothèque côté serveur. Si vous êtes intéressé, je peux vous donner un exemple simple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.