ExpressJS: creación de plantillas

Pug es un motor de plantillas para Express. Los motores de plantillas se utilizan para eliminar el desorden de nuestro código de servidor con HTML, concatenando cadenas de forma salvaje a las plantillas HTML existentes. Pug es un motor de plantillas muy potente que tiene una variedad de características que incluyenfilters, includes, inheritance, interpolation, etc. Hay mucho terreno que cubrir al respecto.

Para usar Pug con Express, necesitamos instalarlo,

npm install --save pug

Ahora que Pug está instalado, configúrelo como el motor de plantillas para su aplicación. usteddon'tnecesita 'requerirlo'. Agregue el siguiente código a suindex.js archivo.

app.set('view engine', 'pug');
app.set('views','./views');

Ahora cree un nuevo directorio llamado vistas. Dentro de eso crea un archivo llamadofirst_view.puge ingrese los siguientes datos en él.

doctype html
html
   head
      title = "Hello Pug"
   body
      p.greetings#people Hello World!

Para ejecutar esta página, agregue la siguiente ruta a su aplicación:

app.get('/first_template', function(req, res){
   res.render('first_view');
});

Obtendrá la salida como: Hello World!Pug convierte este marcado de aspecto muy simple a html. No necesitamos hacer un seguimiento del cierre de nuestras etiquetas, no es necesario utilizar palabras clave de identificación y clase, sino utilizar '. y'#'para definirlos. El código anterior primero se convierte en -

<!DOCTYPE html>
<html>
   <head>
      <title>Hello Pug</title>
   </head>
   
   <body>
      <p class = "greetings" id = "people">Hello World!</p>
   </body>
</html>

Pug es capaz de hacer mucho más que simplificar el marcado HTML.

Características importantes de Pug

Exploremos ahora algunas características importantes de Pug.

Etiquetas simples

Las etiquetas están anidadas según su sangría. Como en el ejemplo anterior,<title> estaba sangrado dentro del <head>etiqueta, por lo que estaba dentro. Pero el<body> etiqueta estaba en la misma sangría, por lo que era un hermano de la <head> etiqueta.

No necesitamos cerrar las etiquetas, tan pronto como Pug encuentra la siguiente etiqueta en el mismo nivel de sangría o en el exterior, cierra la etiqueta por nosotros.

Para poner texto dentro de una etiqueta, tenemos 3 métodos:

  • Space seperated

h1 Welcome to Pug
  • Piped text

div
   | To insert multiline text, 
   | You can use the pipe operator.
  • Block of text

div.
   But that gets tedious if you have a lot of text.
   You can use "." at the end of tag to denote block of text.
   To put tags inside this block, simply enter tag in a new line and 
   indent it accordingly.

Comentarios

Pug usa la misma sintaxis que JavaScript(//)para crear comentarios. Estos comentarios se convierten en comentarios html (<! - comment ->). Por ejemplo,

//This is a Pug comment

Este comentario se convierte en lo siguiente.

<!--This is a Pug comment-->

Atributos

Para definir atributos, usamos una lista de atributos separados por comas, entre paréntesis. Los atributos de clase e ID tienen representaciones especiales. La siguiente línea de código cubre la definición de atributos, clases e ID para una etiqueta html determinada.

div.container.column.main#division(width = "100", height = "100")

Esta línea de código se convierte a la siguiente. -

<div class = "container column main" id = "division" width = "100" height = "100"></div>

Pasar valores a plantillas

Cuando representamos una plantilla Pug, podemos pasarle un valor de nuestro controlador de ruta, que luego podemos usar en nuestra plantilla. Cree un nuevo controlador de ruta con lo siguiente.

var express = require('express');
var app = express();

app.get('/dynamic_view', function(req, res){
   res.render('dynamic', {
      name: "TutorialsPoint", 
      url:"http://www.tutorialspoint.com"
   });
});

app.listen(3000);

Y cree un nuevo archivo de vista en el directorio de vistas, llamado dynamic.pug, con el siguiente código -

html
   head
      title=name
   body
      h1=name
      a(href = url) URL

Abra localhost: 3000 / dynamic_view en su navegador; Debería obtener el siguiente resultado:

También podemos usar estas variables pasadas dentro del texto. Para insertar variables pasadas entre el texto de una etiqueta, usamos#{variableName}sintaxis. Por ejemplo, en el ejemplo anterior, si quisiéramos poner Saludos desde TutorialsPoint, entonces podríamos haber hecho lo siguiente.

html
   head
      title = name
   body
      h1 Greetings from #{name}
      a(href = url) URL

Este método de usar valores se llama interpolation. El código anterior mostrará la siguiente salida. -

Condicionales

También podemos usar declaraciones condicionales y construcciones de bucle.

Considere lo siguiente:

Si un usuario ha iniciado sesión, la página debería mostrar "Hi, User" y si no, entonces el "Login/Sign Up"enlace. Para lograr esto, podemos definir una plantilla simple como:

html
   head
      title Simple template
   body
      if(user)
         h1 Hi, #{user.name}
      else
         a(href = "/sign_up") Sign Up

Cuando renderizamos esto usando nuestras rutas, podemos pasar un objeto como en el siguiente programa:

res.render('/dynamic',{
   user: {name: "Ayush", age: "20"}
});

Recibirás un mensaje - Hi, Ayush. Pero si no pasamos ningún objeto o pasamos uno sin clave de usuario, obtendremos un enlace de registro.

Incluir y componentes

Pug proporciona una forma muy intuitiva de crear componentes para una página web. Por ejemplo, si ve un sitio web de noticias, el encabezado con el logotipo y las categorías siempre es fijo. En lugar de copiar eso en cada vista que creamos, podemos usar laincludecaracterística. El siguiente ejemplo muestra cómo podemos usar esta función:

Cree 3 vistas con el siguiente código:

HEADER.PUG

div.header.
   I'm the header for this website.

CONTENT.PUG

html
   head
      title Simple template
   body
      include ./header.pug
      h3 I'm the main content
      include ./footer.pug

FOOTER.PUG

div.footer.
   I'm the footer for this website.

Cree una ruta para esto de la siguiente manera:

var express = require('express');
var app = express();

app.get('/components', function(req, res){
    res.render('content');
});

app.listen(3000);

Vaya a localhost: 3000 / components, recibirá el siguiente resultado:

include también se puede utilizar para incluir texto sin formato, CSS y JavaScript.

Hay muchas más características de Pug. Pero esos están fuera del alcance de este tutorial. Puede explorar más a fondo Pug en Pug .