Cómo crear un middleware personalizado en Express.js

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Análisis de un middleware Express
  • Usando el reqobjeto
  • Aplicación del resobjeto
  • Poniendo fin al ciclo Requestdel yResponse
  • Conclusión
  • El middleware es una función que ejecuta el método de ciclo de vida en un servidor Express y utiliza los ciclos requesty response. Express.js ofrece middleware integrado y le permite producir versiones personalizadas para funciones precisas, como evitar que un usuario realice una determinada operación o registrar la ruta de una solicitud entrante a su aplicación.

    En este artículo, aprenderá cómo crear un middleware personalizado en Express.js.

    Prerrequisitos

    Para seguir este artículo necesitarás:

    • Se recomienda tener conocimientos generales de Node.js, pero no es obligatorio. Para obtener más información sobre Node.js, consulta nuestra serie Cómo codificar en Node.js.
    • Una comprensión general de los ciclos requesty response. Consulta nuestros tutoriales sobre Cómo usar el reqobjeto en Express y Cómo usar el resobjeto en Express .
    • Node.js instalado localmente, lo cual puedes hacer siguiendo Cómo instalar Node.js y crear un entorno de desarrollo local .

    Análisis de un middleware Express

    Todas las funciones de middleware en Express.js aceptan tres argumentos después de los requestmétodos de ciclo de vida response, y next. En su index.jsarchivo, defina una función con los tres métodos de ciclo de vida como argumentos:

    índice.js

    function myCustomMiddleware(req, res, next) {  // ...}

    El primer argumento, req, es una abreviatura del requestobjeto con propiedades integradas para acceder a los datos desde el lado del cliente y facilitar las solicitudes HTTP. El resargumento es el responseobjeto con métodos integrados para enviar datos al lado del cliente a través de solicitudes HTTP. El argumento, next, es una función que le indica a Express.js que continúe con el siguiente middleware que ha configurado para su aplicación.

    El middleware tiene la capacidad de modificar los objetos reqy res, ejecutar cualquier código que desee, finalizar el requestciclo responsey y pasar a las siguientes funciones.

    Tenga en cuenta el orden de su middleware, ya que next()es necesario invocar la función en cada middleware anterior.

    Ahora que ha revisado los tres argumentos que construyen un middleware, veamos cómo ensamblar un middleware personalizado.

    Usando el reqobjeto

    Para identificar al usuario que ha iniciado sesión, puede crear un middleware personalizado que pueda obtener al usuario mediante pasos de autenticación. En su setCurrentUser.jsarchivo, defina una función que acepte los tres métodos de ciclo de vida como argumentos:

    middleware/setCurrentUser.js

    // Require in logic from your authentication controllerconst getUserFromToken = require("../getUserFromToken");module.exports = function setCurrentUser(req, res, next) {  const token = req.header("authorization");  // look up the user based on the token  const user = getUserFromToken(token).then(user = {    // append the user object the the request object    req.user = user;    // call next middleware in the stack    next();  });};

    Dentro de la setCurrentUser()función, el reqobjeto aplica el método integrado .header()para devolver el token de acceso de un usuario. Al utilizar el método del controlador de autenticación, getUserFromToken(), su req.header()lógica pasa como argumento para buscar al usuario en función de su token. También puede utilizar el reqobjeto para definir una propiedad personalizada .userpara almacenar la información del usuario. Una vez que el middleware esté completo, exporte el archivo.

    Puede habilitar su middleware personalizado en su servidor Express aplicando el middleware Express.js integrado .use().

    En su server.jsarchivo, cree una instancia de Express y solicite en su setCurrentUser()middleware personalizado:

    servidor.js

    const express = require('express');const setCurrentUser = require('./middleware/setCurrentUser.js');const app = express();app.use(setCurrentUser);// ...

    El app.use()middleware acepta su middleware personalizado como argumento y autoriza su lógica en su servidor Express.

    Aplicación del resobjeto

    También puede crear un middleware personalizado para manejar la funcionalidad de su responseobjeto, como diseñar un nuevo encabezado.

    En su addNewHeader.jsarchivo, defina una función y utilice el .setHeader()método en el resobjeto:

    middleware/addNewHeader.js

    module.exports = function addNewHeader(req, res, next) {  res.setHeader("X-New-Policy", "Success");  next();};

    Aquí, el .setHeader()método aplicará el nuevo encabezado, Success, en cada llamada de función. El next()método le indicará a Express.js que continúe con el siguiente middleware una vez que se complete la ejecución.

    Poniendo fin al ciclo Requestdel yResponse

    Express.js también le permite finalizar el ciclo requesty responseen su middleware personalizado. Un caso de uso común para un middleware personalizado es validar el conjunto de datos de un usuario en su reqobjeto.

    En su isLoggedIn.jsarchivo, defina una función y establezca una condición para verificar si los datos de un usuario existen en el reqobjeto:

    middleware/isLoggedIn.js

    module.exports = function isLoggedIn(req, res, next) {  if (req.user) {    next();  } else {    // return unauthorized    res.send(401, "Unauthorized");  }};

    Si los datos del usuario existen en el reqobjeto, el middleware personalizado pasará a las siguientes funciones. Si los datos de un usuario en particular no están en el objeto, el .send()método del resobjeto enviará el código de estado de error 401y un mensaje al lado del cliente.

    Una vez que haya configurado su middleware, exporte el archivo y navegue hasta su servidor Express.js. En su server.jsarchivo, solicite e inserte su middleware personalizado como argumento en una GETsolicitud para autenticar a un usuario a través de una única ruta:

    servidor.js

    const express = require("express");const setCurrentUser = require("./middleware/setCurrentUser.js");const isLoggedIn = require("./middleware/isLoggedIn.js");const app = express();app.use(setCurrentUser);app.get("/users", isLoggedIn, function(req, res) {  // ...});

    La ruta /usersmaneja la lógica dentro de su isLoggedInmiddleware personalizado. Según el orden de su servidor Express, la ruta también puede acceder al setCurrentUsermiddleware tal como está definido antes de su GETsolicitud.

    Conclusión

    Express.js le brinda la posibilidad de personalizar su middleware fuera de los métodos integrados para analizar la autenticación de un usuario y sus datos.

    Para obtener más información sobre cómo escribir middleware Express.js personalizado, visita la documentación oficial en el sitio de Express.js.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion