Existe um mecanismo de modelo para o Node.js? [fechadas]

271

Estou experimentando a construção de um aplicativo Web inteiro usando o Node.js. Existe um mecanismo de modelo semelhante ao (por exemplo) o mecanismo de modelo do Django ou algo semelhante que pelo menos permita que você estenda os modelos de base?

Seb
fonte
17
Acabei de descobrir que o mecanismo JavaScript V8 é mais rápido que Ruby, PHP e Python. Surpreendentemente rápido para uma linguagem dinâmica. Mais lento que Java e C #, no entanto.
Nosredna
77
@Nosredna: Como o Java pode ser mais rápido do que qualquer coisa ?! ;)
Daniel Sloof
27
@Daniel Java é realmente muito rápido hoje em dia, superando tudo, exceto Ada, C e C ++ nos benchmarks Shootout do Debian.
Mentalikryst
20
Qualquer um que não se preocupa com a sintaxe, a produtividade e qualquer outra coisa, mas o desempenho, deve estar usando Raphters (framework web para C)
Pablo B.
6
O node.js não é sobre o idioma. É totalmente sobre o design e a maneira como o js lida com o IO, o que é brilhante. Você pode fazer com que as estruturas da web ruby ​​sejam executadas rapidamente, se você redesenhar as bibliotecas de IO.
precisa saber é

Respostas:

52

Você deve poder usar o mustache.js, se não funcionar, envie-me os problemas e eu o corrigirei, porque estou prestes a usá-los no node.js de qualquer maneira.

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

Eu sei que ele funciona sem um DOM, porque vários aplicativos independentes do CouchDB estão usando-o em um servidor de exibição Spidermonkey.

mikeal
fonte
3
Há também um post sobre o uso de bigode e sublinhado juntamente com Node.js: boldr.net/create-a-web-app-with-node
MKroehnert
@MKroehnert o link está quebrado
yukashima huksay
40

Se você gosta de haml, mas quer algo ainda melhor, confira http://jade-lang.com para o nó, escrevi haml.js também :)

tjholowaychuk
fonte
4
Jade é bem legal. Eu apenas comecei a usá-lo, então não posso falar com o desempenho, mas eu gosto da sintaxe. E o suporte embutido no Express é uma vantagem.
broofa
3
o desempenho é suficiente, os modelos devem ser armazenados em cache de qualquer maneira. Além disso, lembre-se de escalar horizontalmente, não verticalmente, caso contrário, você pode muito bem não usar um modelo de motor em tudo e apenas algumas funções / concats
tjholowaychuk
14

Existem novos motores de modelos o tempo todo.

O underscore.js adiciona muito suporte de programação funcional ao js e possui modelos.

E só hoje ouvi falar sobre isso: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
fonte
6
Polegares para cima para underscore.js. Biblioteca incrível, eu a uso tanto para o lado do cliente quanto para o trabalho do node.js. Seu mecanismo de modelagem é baseado no mecanismo JS Micro Templating de John Resig ( ejohn.org/blog/javascript-micro-templating ) que eu já usei várias vezes antes. Afaik é sua melhor opção neste momento ao trabalhar com o node.js.
Felix Geisendörfer 28/11/2009
2
Algum destes suporta herança?
Nick Retallack
1
@ Nick Jinjs parece suportar herança, veja a primeira linha: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore
13

Você deve dar uma olhada no node-asyncEJS , que foi projetado explicitamente para levar em conta a natureza assíncrona do node.js. Ele ainda permite blocos de códigos assíncronos dentro do modelo.

Aqui está um exemplo da documentação:

<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>
Fabian Jakobs
fonte
7

Você pode tentar sem barba (inspirado em soldas / chapas):

Por exemplo:

{ 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..."}  ]
  }
}

Seu modelo:

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

Resultado:

<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>
carambolagem
fonte
Seja mais descritivo na sua resposta sobre o seu código e o link ao qual você se referiu. Consulte: Como responder
askmish
Seria interessante, como realmente processar as variáveis de arquivo ou Preencher dentro Node
Julian F. Weinert
6

Eu fiz algum trabalho em uma porta bastante completa da linguagem de modelo do Django para o projeto djangode do Simon Willisons (funções de utilitários para o node.js que emprestam alguns conceitos úteis do Django).

Veja a documentação aqui .

AHM
fonte
6

Eu uso o Twig com Symfony e agora estou mexendo no node.js, então estou vendo https://github.com/justjohn/twig.js e https://github.com/paularmstrong/swig , que você encontrará provavelmente como se você usar django.

Tac Tacelosky
fonte
2
O TwigJS está meio morto, o GitHub diz que o último commit foi há dois anos atrás. Swig, por outro lado, é bastante ativo. Eu iria para Swig.
Darkhogg
FYI : A partir desta confirmação em 25 de junho de 2015 , o Swig github alega que não está mais sendo mantido . Isso pode mudar no futuro, mas a partir de agora, é algo a considerar.
radiovisual 17/08/2015
O Nunjucks tem uma sintaxe muito semelhante, pelo que vale a pena.
Mwcz 15/05/19
5

Se você estiver procurando uma abordagem minimalista dos modelos, consulte o JSON Template .

Uma alternativa mais completa é EJS . É um pouco mais parecido com algo que você obteria do Django.

Sua milhagem pode variar para cada um deles - eles foram projetados para um ambiente Javascript do navegador, e não para o Node.js.

ShZ
fonte
2
Não é semelhante aos modelos do Django, pois os modelos do Django têm boa documentação. O EJS é uma luta difícil e você acabará lendo o código-fonte apenas para entender o que está disponível para você.
5

AVISO: JinJs não é mais mantido. Ainda está funcionando, mas não é compatível com a versão mais recente do express.

Você pode tentar usar jinjs . É um porto do Jinja, um sistema de templates Python muito bom. Você pode instalá-lo com o npm assim:

npm install jinjs

em template.tpl:

I say : "{{ sentence }}"

no seu template.js:

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

A saída será:

I say : "Hello, World!"

Estamos desenvolvendo ativamente, uma boa documentação deve vir em breve.

fe_lix_
fonte
4

haml é uma boa escolha para o 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>
Mark Lindell
fonte
3

O Google Closure Templates é um sistema de templates nativo em JavaScript e um ajuste aparentemente natural ao NodeJS. Aqui estão algumas instruções para integrá-los.

Adam Crossland
fonte
2

Você tentou o PURE ?
Se você tentar, sinta-se à vontade para postar qualquer problema que possa encontrar no fórum

Embora tenha sido projetado principalmente para o navegador, funciona bem com o Jaxer e o Rhino.

Ainda não conheço o node.js, mas se você pode armazenar em cache algumas JS e funções na memória, a velocidade deve ser ainda mais impressionante.

Microfone
fonte
O Node.js não entende o DOM ... O PURE usa o DOM, mas como ele faz as strings dele. Isso é interessante para investigar. Desculpe pelo barulho.
560 Mic
2

Há uma porta do mecanismo de modelagem do Django para JavaScript. No entanto, ele não é atualizado há muito tempo, mas ainda pode ter recursos suficientes.

http://code.google.com/p/jtl-javascript-template/


fonte
2

Experimente o Yajet também. ;-) É um novo que acabei de lançar ontem, mas estou usando-o há um tempo e é estável e rápido (os modelos são compilados para uma função JS nativa).

Ele possui a melhor sintaxe possível para um mecanismo de modelo, e um rico conjunto de recursos, apesar de seu pequeno tamanho de código (8,5 mil minificado). Possui diretivas que permitem introduzir condicionais, iterar matrizes / hashes, definir componentes de modelo reutilizáveis ​​etc.

mishoo
fonte
Mishoo interessante, bom trabalho. Tem alguma vantagem sobre o EJS?
trusktr
0

Encontrei hogan.js no Twitter e recomendei por Tim O'Reilly em seu site. Não tenho boas práticas, mas confio no Twitter e na O'Reilly. Você deveria tentar...

KimKha
fonte
0

Honestamente, o melhor e mais simples mecanismo de modelo para o Node.js é o (IMHO) Plates ( https://github.com/flatiron/plates ). Você também pode verificar a estrutura do Flatiron MVC para Node.js ( http://flatiron.org ).

trusktr
fonte
-1

Você pode usar dojox.dtl do DojoToolkit.org. Observe que o dojo 1.7 pode ser executado no NodeJS e funcionar como uma biblioteca do lado do servidor. Se você estiver interessado, posso dar um exemplo simples.

supNate
fonte