Express View Engines
Como vimos en el post anterior de ExpressJS, podemos referenciar a nuestro WebFramework con el ViewEngine que elijamos, vamos a ver 2 opciones de VisionMedia: EJS y Jade, y por último Mustache.
Ambas opciones se instalan desde NPM:
npm install ejs
npm install jade
Ejs, jade, mustache, etc. son paquetes externos a Express. Por lo que hay que instalarlos por npm aparte.
Configurando un ViewEngine en Express
El objetivo de los view engines en express es que podamos definir a nuestro gusto como renderizar la vista utilizando templates.
Ejs y Jade son los primeros que salieron con Express, hoy en dia tenemos mas opciones como jQuery Template, Mustache, etc.
Siguiendo con la estructura, creamos el archivo nuevo lenguajes.ejs donde vamos a tener nuestra vista.
/app-root
/models
/controllers
/views
lenguajes.ejs
/public
/images
/styles
/scripts
/tests
/utils
app.js
package.json
Luego, configuramos el server express con el view engine:
var express = require('express'),
app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('lenguajes', {
title: 'Lenguajes de Programacion',
lenguajes: ['javascript', 'java', '.net', 'python', 'php']
});
});
En la primeras 2 lineas referenciamos a express y creamos un server. En la linea 04 le decimos a express donde vamos a guardar las vistas y en la 05 le especificamos el view engine a utilizar.
EJS
Ejs es el mas simple, ya que se parece mucho a otros lenguajes como Java o .NET. Con Ejs la vista nos quedaria de esta forma:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<% if (lenguajes.length) { %>
<ul>
<% lenguajes.forEach(function(lenguaje){ %>
<li><%= lenguaje %></li>
<% }) %>
</ul>
<% } %>
</body>
</html>
Jade
Jade es bastante diferente, ya que es mas apuntando a ZenCoding, no exactamente eso, pero es divertido:
!!! html
head
title= title
body
- if (lenguajes.length)
ul
- lenguajes.forEach(function(lenguaje){
li= lenguaje
- })
Mustache
Este es interesante ya que el template queda bastante mas limpio, es decir, no tiene condicionales ni forEachs. Por lo que no es para cualquier cosa, pero si armas templates simple (como el de arriba) queda mucho mas limpio tu view.
<!DOCTYPE html>
<html>
<head>
<title>{{title}}</title>
</head>
<body>
<ul>
{{# lenguajes}}
<li>{{.}}</li>
{{/ lenguajes}}
</ul>
</body>
</html>
Como dije antes hay muchos mas, para cerrar les dejo Consolidate.js es un repositorio de VisionMedia donde consolidan todos los templates, para que no estemos referenciando a cada uno en especial.
En Consolidate mustache está dentro de hogan y jqueryTmpl en jqtpl