Middlewares en Node.js

Por user Jean Carlos Mariños Urquiaga
Middlewares en Node.js

Middlewares es un concepto muy importante al desarrollar sobre Node.js, la plataforma para utilizar a javascript en el lado del servidor.

En este tutorial vamos a aprender un concepto muy importante para los que desarrollamos en Node.js, los middlewares.

Un middleware es un bloque de código que se ejecuta entre la petición que hace el usuario (request) hasta que la petición llega al servidor.

Es inevitable utilizar middlewares en una aplicación en Node.js, y el ejemplo más común es crear un middleware para dar acceso a una determinada URL a un usuario logueado, así que veamos como hacer esto.

Middlewares

Vamos a hacer de cuenta que ya tenemos un servidor creado con express y dos rutas ('/', /admin/),


const middlewares = {

    isLoggedIn : function (req, res, next) {
        if (req.user) return next();
        res.redirect('/');
    }
};
module.exports = middlewares;

Este es el middleware mas común para saber si un usuario esta o no esta logueado. Si esta logueado le enviamos el método next() para que el controlador continue su ejecución, si no le negamos el acceso y lo redirigimos a otra url res.redirect(), al final exportamos la variable middleware y ya lo podemos utilizar desde cualquier otro archivo en su proyecto.

En este mismo archivo podemos agregar mas middlewares.


const middlewares = {

    isLoggedIn : function (req, res, next) {
        if (req.user) return next();
        res.redirect('/');
    },
    isSuperUser : function (req, res, next) {
        if (req.user.is_superuser) return next();
        res.redirect('/');
    }
};
module.exports = middlewares;

Con esto ya tenemos dos middleware para utilizar, ahora veremos como podemos utilizar a estos middleware en alguna ruta.

Controllers

Antes de que una petición llegue a un controlador pasa por los middlewares que tenga en el camino. ¿Cómo agregamos un middleware a una ruta? Muy fácil.


const isLoggedIn = require('./middlewares').isLoggedIn;

router.route('/admin/')
    .get(isLoggedIn, function (req, res) {
     ....
    });

Para agregar un middleware, solo lo ponemos dentro del método HTTP que estamos utilizando, con eso primero ira al middleware y dependiendo si el usuario esta logueado o no, le permite el acceso al controlador o lo envía a otro. 

Si quieren poner un middleware a todas sus rutas de un controlador lo podemos hacer de esta manera.


router.use(isLoggedIn);

Con esto todas las rutas declaradas dentro de ese router tendrán el middleware activo.

Estos no es lo único que deben saber de los middleware, nuestro servidor de Nodejs o Express también les podemos agregar los middleware necesarios, como los de las sesiones, las cookies, etc. Si deseas aprender mucho más de Node.js los invito a los cursos que tenemos, Curso de Node.js y Curso de Fundamentos de Node.js.

user

Jean Carlos Mariños Urquiaga

Backend Developer | Python / Django - Javascript / Node.js