- 1

Ventajas competitivas de Node.js para empresas
02:12 - 2

Principales patrones de diseño en JavaScript y Node.js
02:50 - 3

Implementación de patrones Singleton y Factory en JavaScript
06:35 - 4

Combinando patrones Singleton y Factory para crear un logger
10:47 - 5

Patrón Observer con Event Emitter en Node.js
11:52 - 6

Implementación del patrón middleware en Node.js sin Express
07:43 - 7

Decorators e inyección de dependencias en Node.js
11:16
Implementación del patrón middleware en Node.js sin Express
Clase 6 de 26 • Curso de Node.js Avanzado
Contenido del curso
- 8

Buffers y streams en Node.js: manejo eficiente de datos
07:27 - 9

Transformación de archivos con streams en Node.js
09:19 - 10

Event Loop en Node.js: fases y funcionamiento interno
06:24 - 11

Event Loop de Node.js: funcionamiento y orden de ejecución
06:24 - 12

Promise.all para ejecutar tareas asíncronas en paralelo
10:13
- 22

Creación de aplicaciones CLI básicas con Node.js
08:08 - 23

Parseo de argumentos CLI con Minimist en Node.js
07:12 - 24

Herramientas básicas para crear CLI en Node.js
10:26 - 25

Implementación de historial y generación de respuestas en AI assistant
16:30 - 26

Conversión de CLI Node.js a binarios instalables con npm
04:43
El patrón middleware es fundamental en el ecosistema de Node.js y especialmente utilizado por el framework Express. Este patrón permite ejecutar una secuencia ordenada de funciones, conocidas como middlewares, sobre cada petición (request) recibida. Cabe destacar que cada middleware puede modificar los objetos recibidos y decidir si continuar o detener la ejecución secuencialmente.
¿Qué es el patrón middleware en Node.js?
El middleware es un patrón que facilita ejecutar una serie de acciones secuencialmente durante la gestión de una petición en aplicaciones Node.js. Aunque popular por su uso en Express, este patrón puede implementarse fácilmente en aplicaciones puras de Node.js, sin necesidad del framework específico.
Cada middleware:
- Recibe generalmente tres parámetros principales:
- El objeto de petición (request).
- El objeto de respuesta (response).
- Una función llamada next que continúa la cadena de ejecución.
- Realiza tareas específicas como autenticación, validación o procesamiento.
- Puede modificar los objetos recibidos antes de pasar al siguiente middleware.
¿Cómo implementar middlewares sin Express?
Para demostrar el funcionamiento de middleware sin utilizar Express, se puede crear una función propia llamada runMiddlewares. A continuación, se describe paso a paso cómo hacerlo en una aplicación sencilla Node.js.
Creación de la función runMiddlewares
Inicialmente, es imprescindible definir una función como la siguiente:
const runMiddlewares = (req, res, middlewares) => {
let index = 0;
const next = () => {
if (index < middlewares.length) {
const middleware = middlewares[index++];
middleware(req, res, next);
}
};
next();
};
Esta función:
- Toma como argumentos el objeto request, el objeto response y un arreglo de funciones middleware.
- Ejecuta cada middleware incrementando un índice para avanzar en la secuencia.
- Utiliza recursion con la función
nextpara controlar el flujo.
¿Cómo definir y ejecutar varios middlewares?
A continuación, definimos diferentes middlewares simulando tareas prácticas habituales en una solicitud HTTP.
const middlewareUno = (req, res, next) => {
console.log('autenticación de la solicitud');
next();
};
const middlewareDos = (req, res, next) => {
console.log('procesamiento de la petición');
next();
};
const middlewareTres = (req, res, next) => {
console.log('finalización');
next();
};
Posteriormente, ejecutas la función:
const req = {};
const res = {};
runMiddlewares(req, res, [middlewareUno, middlewareDos, middlewareTres]);
Al lanzar este script, verás en la consola los mensajes indicando la ejecución secuencial de cada middleware.
¿Cómo implementar middlewares condicionales?
Un middleware puede decidir, según ciertas condiciones establecidas en tiempo de ejecución, si continúa ejecutándose la cadena de middlewares siguientes o no. Como ejercicio, puedes añadir un cuarto middleware cuya ejecución dependerá de la lógica definida en el middleware anterior.
Este tipo de lógica ayuda a gestionar adecuadamente diferentes escenarios que podrían surgir en el ciclo de vida de una petición web.