Blog
En esta clase vamos a ver qué son los Middleware y para que sirven en nuestro proyecto.
Los Middleware realizan una acción, por ejemplo una comprobación de inicio de sesión, y deja o no acceder a la ruta que queremos acceder. Esto es útil por ejemplo para hacer una zona restringida en nuestra web.
Middleware sencillo
Para empezar, vamos a ver un ejemplo sencillo de Middleware, el cual nos servirá para imprimir en consola cada vez que alguien accede a la página principal “/”.
var express = require('express'); var app = express(); //Middleware que se ejecutará y continuará app.get('/', function (req, res, next) { console.log('Se accede a la página principal a las ' + new Date()); next(); }); app.get('/', function (req, res, next) { res.send('Página principal') }); var server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Ejemplo de aplicación del curso de NodeJS, ExpressJS y MongoDB en el puerto', port); });
En este caso, al introducir “next” en la función get de ‘/’, hace que actúe como middleware y le permitimos con next(), debajo del todo, que continúe la ejecución. Si vamos a http://localhost:3000, veremos ahora en la terminal que se ha ejecutado el middleware, y ha continuado con la siguiente ruta.
Esto mismo podríamos hacerlo con una función para tener separado el Middleware. Para hacerlo, basta con seguir este ejemplo:
const express = require('express'); const app = express(); //Llamamos a la función a continuación app.get('/', middleware1); //Función que contiene el middleware function middleware1(req, res, next) { console.log('Se accede a la página principal a las ' + new Date()); next(); } app.get('/', function (req, res, next) { res.send('Página principal') }); const server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Ejemplo de aplicación del curso de NodeJS, ExpressJS y MongoDB en el puerto', port); });
Con esto hemos creado una función separada y la hemos llamado al entrar en la página principal. El comportamiento es el mismo que en el ejemplo anterior.
Múltiples Middlewares
Por otro lado, podemos tener varios Middleware dentro de una ruta, los cuales se ejecutarán en orden. Para probar esto, podemos crear un Middleware que bloquee el acceso a la página, pero antes se ejecute el Middleware que nos indica la hora de acceso del usuario:
const express = require('express'); const app = express(); //Llamamos a las dos funciones a continuación app.get('/', middleware1, lockAccess); //Función que contiene el middleware de log function middleware1(req, res, next) { console.log('Se accede a la página principal a las ' + new Date()); next(); } //Función que bloquea el acceso function lockAccess(req, res, next) { res.status(304).send('Contenido Bloqueado'); } app.get('/', function (req, res, next) { res.send('Página principal') }); const server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Ejemplo de aplicación del curso de NodeJS, ExpressJS y MongoDB en el puerto', port); });
Hay que tener en cuenta que cuando ejecutemos este script y lo visualicemos en el navegador, es posible que veamos ‘Página principal’ imprimido en pantalla. Esto es debido a que la petición se cachea por parte del navegador y muestra un contenido anterior. Para solucionar esto simplemente eliminamos la caché del navegador. Volvemos a intentar entrar a la ruta y no deberiamos de acceder desde el navegador, pero si se mostrará por consola la fecha del intento de acceso y la razón por la cual no accedemos a la ruta es por el middleware que recientemente programamos, lo cual indica que todo funciona correctamente.
Contador de visitas
Para concluir con esta clase, vamos a finalizar con un ejemplo de código donde veremos cómo realizar un contador de visitas en tiempo real. Cada vez que alguien acceda a nuestra página, se incrementará el número de visitas y se visualizará en pantalla. Para ello hemos creado una variable llamada visitantes y creado un Middleware con la función .use(), para ejecutar este código debemos borrar o comentar nuevamente el código anterior:
const express = require('express'); const app = express(); var visitantes; app.use(function (req, res, next) { visitantes++; next(); }) //Llamamos a la función a continuación app.get('/', middleware1); //Función que contiene el middleware function middleware1(req, res, next) { console.log('Se accede a la página principal a las ' + new Date()); next(); } function lockAccess(req, res, next) { res.status(304).send('Contenido Bloqueado'); } app.get('/', function (req, res, next) { res.send('Página principal, eres el visitante número ' + visitantes) }); const server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Ejemplo de aplicación del curso de NodeJS, ExpressJS y MongoDB en el puerto', port); visitantes = 0; });
Ahora, si lo ejecutamos, veremos un resultado como el siguiente:
Y con esto concluimos la clase de hoy. En la próxima veremos las plantillas y cómo escribir código HTML en ellas.