Escribir todo el HTML dentro del código JavaScript es muy engorroso y lo que se recomienda es utilizar un motor de plantillas (template engine) que nos permita separar nuestro código HTML de nuestro código JavaScript.
Existen varios motores de plantillas como Pug, Mustache y EJS. Como ilustración vamos a usar Pug en este capítulo.
El primer paso es instalar el motor de plantillas utilizando npm o yarn. Por ejemplo, para instalar Pug con yarn ejecutaríamos el siguiente comando:
$ yarn add pug --dev
El segundo paso es configurar el motor de plantillas y la carpeta donde se van a almacenar las vistas. Por ejemplo, para configurar Pug y la carpeta views
agregaríamos las siguiente dos líneas en nuestra aplicación después de definir la variable app
:
app.set('view engine', 'pug');
app.set('views', 'views');
Para crear una vista debes crear un archivo con extensión .pug
en la carpeta views
(o la que hayas configurado).
Pug utiliza una sintaxis similar a HTML pero más compacta. Veamos un ejemplo. Crea un archivo llamado index.pug
en la carpeta views
con el siguiente contenido:
html
head
title Vista con Pug
body
h1 Esta es mi primera vista con Pug
Para utilizar esta vista desde una ruta debemos usar el método res.render
. Agrega la siguiente ruta al archivo app.js
:
app.get('/', (req, res) => {
res.render('index');
});
Fíjate que no es necesario agregar la extensión del archivo, Express ya sabe cuál es.
Inicia el servidor e ingresa desde un navegador a http://localhost:3000/. Deberías ver el texto "Esta es mi primera vista con Pug" y el título de la pestaña debería ser "Vista con Pug".
También es posible pasar información desde la ruta a la vista. Por ejemplo, si queremos pasar el texto que va en el title
y el h1
desde la ruta podemos hacer lo siguiente:
html
head
title= title
body
h1= message
Y pasarle esas variables title
y message
desde la ruta:
app.get('/', (req, res) => {
res.render('index', { title: "Variables en Pug", message: "Ya sé pasar info a la vista" });
});
Si reinicias el servidor y refrescas la página deberías ver el texto "Ya sé pasar info a la vista" y el título de la pestaña debería ser "Variables en Pug".
Esta información es específica de Pug. Para ver cómo se hace en otros motores de plantillas debes consultar su documentación.
Existen elementos que se repiten en todas las páginas como la estructura básica de HTML, el menú principal, etc. (a esto se le conoce como un layout). Con Pug puedes crear un archivo con estos elementos y reutilizarlo en tus vistas.
Por ejemplo, crea un archivo llamado layout.pug
dentro de la carpeta views
con el siguiente contenido:
html
head
title Mi super página
body
block content
La línea block content
se va a reemplazar con el código de cada vista. Ahora vamos a crear una vista llamada index.pug
(también en la carpeta views
) que va a "extender" el layout que acabamos de crear:
extends layout.pug
block content
h1 Hola Mundo
Todo lo que se encuentre debajo de block content
se va a reemplazar en el layout donde esté definido el bloque con el mismo nombre.
Puedes tener varios bloques si es necesario.