Que son los middleware en Express.js

Christian Russo
orbit-software

--

Durante mi entrevista para mi puesto de programador en el gobierno del condado de Utah, una de las preguntas fue explicar qué era el middleware. Aunque estaba familiarizado con el término, no pude responderlo adecuadamente.

Después de mi entrevista, decidí profundizar en el tema. Pronto descubrí que había estado usando middleware todo el tiempo y que era una parte fundamental de mi flujo de trabajo de desarrollo.

Solicitudes HTTP Express

Si está familiarizado con el micro-framework Express de Node.js, reconocerá este fragmento de código:

app.get(‘/route’, async (request, response) => {return response.send(‘hello, world’);}

Así es como configuramos las solicitudes HTTP y las rutas a nuestro servidor Express.js. Lo que quiero enfatizar aquí es que la función de flecha de devolución de llamada con la firma async (request, response) => {...}.

Esta función podría abstraerse fuera del método app.get () y luego referenciarse en ella de la siguiente manera:

async function sendHelloWorld(request, response) {return response.send(‘hello, world’);}app.get(‘/route’, sendHelloWorld);

Prácticamente no hay diferencia en la forma en que ambos fragmentos manejan la solicitud HTTP. Así que ahora podría preguntarse: “¿Qué tiene que ver con el middleware?” Bueno, todo. Verá, tanto sendHelloWorld () como las funciones de devolución de llamada se utilizan como un medio para manejar la solicitud del cliente al servidor. Estas funciones están en el “medio” del cliente y el servidor. Especifican al servidor los pasos necesarios para manejar esa solicitud específica en esa ruta. Así que ahí lo tienes. Tu primer middleware.

Conceptos básicos de middleware

La llamada al middleware de funciones anteriores puede no ser 100% precisa. El concepto mismo de middleware es ser una función o procedimiento que se ejecuta antes que las funciones de solicitud. Después de todo, el middleware es una función entre la solicitud del cliente y la respuesta del servidor.

Ejemplo

Imaginemos que quiero registrar la terminal del servidor cada solicitud que recibe, incluido el tipo de método HTTP y la ruta de la solicitud. También quiero mantener mi lógica de manejo de solicitudes separada de esta lógica de registro. Puedo crear un middleware para eso:

function logRequest(request, response, next) {
console.log(`HTTP ${request.method} on ${request.baseUrl}`);
return next();
}

Cada función de middleware debe tener al menos tres parámetros: solicitud, respuesta y siguiente. Los dos primeros ya deberías conocerlos. Ahora, “siguiente” se refiere a la función que se ejecutará después del middleware (otro middleware o no).

Cómo utilizar un middleware.

Hay tres formas de aplicar un middleware en Express. Dos son muy similares, con una diferencia en el alcance del enrutamiento. Son:

  1. Aplicar a rutas específicas:
app.get(‘/route’, middleware, async (req, res) => {…});
  1. Aplicar globalmente a todas las rutas:
/* On the main file */
app.use(middleware);
  1. Aplicar localmente a un grupo de rutas:
/* On a route file */
route.use(middleware);

Conclusión

  1. Cree una función con la solicitud, respuesta, próximos parámetros que contengan la lógica que se ejecutará antes del manejo de la solicitud.
  2. Aplique el middleware a rutas específicas usándolo como argumento antes de su async (request, response) función.
  3. Aplicarlo globalmente usando app.use(middleware) en su archivo principal.
  4. Aplíquelo localmente a un archivo de ruta usando route.app(middleware)

--

--