Patrones de dise帽o en Node.js

1

Qu茅 es Node.js y c贸mo impulsa tu negocio

2

Patrones de dise帽o esenciales en Node.js

3

Patr贸n Singleton y Factory en JavaScript

4

Implementaci贸n pr谩ctica de Singleton y Factory en JavaScript

5

Implementaci贸n del patr贸n Observer con EventEmitter en Node.js

6

Implementaci贸n de Middlewares en Node.js sin Express

7

Decorators e inyecci贸n de dependencias en JavaScript

Flujo de Datos con Node.js

8

Aprende qu茅 son Buffer y Streams en Node.js

9

C贸mo utilizar streams y pipelines en Node.js

10

C贸mo funciona el Event Loop en Node.js

11

Qu茅 es Libuv y c贸mo maneja la asincron铆a en Node.js

12

Estrategias para ejecutar c贸digo as铆ncrono en Node.js

Debugging y Diagn贸stico en Node.js

13

C贸mo utilizar el Debugger en Node.js para solucionar problemas

14

Uso de Diagnostic Channels en Node.js para observabilidad y diagn贸stico

15

Instrumentaci贸n y m茅tricas clave en performance para aplicaciones Node.js

16

Control de errores globales y manejo de se帽ales en Node.js

17

Implementaci贸n Eficiente de Logs con Pino en Node.js

Performance en Node.js

18

An谩lisis del event loop en aplicaciones Node.js usando Nsolid

19

C贸mo Diagnosticar y Solucionar Memory Leaks en Aplicaciones Node.js

20

Optimizar rendimiento en Node.js con Worker Threads y Child Processes

21

Optimiza y Escala Aplicaciones Node.js con T茅cnicas de Caching

Creando CLIs con Node.js

22

C贸mo crear aplicaciones CLI con Node.js

23

C贸mo Crear un CLI con Minimist y Manejar Argumentos en Node.js

24

Creaci贸n de un CLI con Node.js y Google Generative AI

25

Creaci贸n de Chat con IA usando CLI en Node

26

C贸mo Crear e Instalar tu Propio CLI de Node con npm

You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesi贸n a prueba de IA

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

0 D铆as
5 Hrs
17 Min
58 Seg

Implementaci贸n de Middlewares en Node.js sin Express

6/26
Resources

Learning how the Middleware pattern works in Node.js allows you to sequentially execute operations during a request. Although Express is known for using this pattern extensively, it is possible to implement it from scratch in Node.js. It is basically functions that manipulaterequests andresponses and can modify, add or remove properties depending on their function.

What is the Middleware pattern?

Middleware is a simple but powerful technique that allows you to handle Web requests by splitting the processing into independent stages. It is central to frameworks such as Express and consists of functions that are executed one after the other in a chain.

A middleware receives three main arguments:

  • Request (req): the object containing information about the request made.
  • Response (res): The object used to generate the response to the request.
  • Next: A function that allows passing to the next Middleware in the chain.

Each Middleware can alter or enrich the objects received before passing them to the next one.

How to implement Middleware without Express?

Implementing your own Middlewares without Express is an effective way to understand its inner workings. Here is a quick description of how to perform a basic implementation using only Node.js.

Step by step implementation:

  1. Create main function.

Declare a function called runMiddlewares that accepts request, response and an array of Middlewares.

  1. Define individual Middlewares

Each Middleware is a separate, clearly identifiable function:

const middleware1  = (req, res, next)  =>  {    console.log('Middleware1 - Authentication');    next(); }; const  middleware2 = (req,  res,  next) => {     console.log('Middleware2 - Request processing');    next(); }; const middleware3 = (req, res,  next) => {    console.log('Middleware 3 - Completion');     next(); }; const middleware3 = (req,res, next) => { console.log('Middleware 3 - Completion'); next();};
  1. Running Middlewares sequentially

Each Middleware is executed in sequential order using a recursive function:

        const runMiddlewares  = (req, res, middlewares)  =>  {    let index  =  0;    const next  =  ()  =>  {        if (index < middlewares.length)  {            const middleware  = middlewares[index++];            middleware(req, res, next);         }  xml-ph-0030@de
  1. Launch execution

Finally, you must start this process by specifying the required parameters:

const req  =  {};const res  =  {};runMiddlewares(req, res, [middleware1, middleware2, middleware3]);

Why is the order of middleware important?

Middlewares are executed strictly in the order in which they are defined in their array. This allows for easy control of specific functionalities, such as authentication, validation, main processing and termination. This ensures that the logical order required for each task is followed.

Practical example of conditional middleware

As a further exercise, you can extend this implementation with conditional logic. For example, allow Middleware 3 to control the execution of Middleware 4:

  • Middleware 3 checks for specific conditions.
  • It decides whether or not to execute Middleware 4 using a conditional structure.

This exercise brings an additional layer of real-world utility to your middleware knowledge.

Try building your own version and share it!

Contributions 3

Questions 0

Sort by:

Want to see more contributions, questions and answers from the community?

Profe: al llegar a este capitulo not茅 lo siguiente: Si bien el contenido es avanzado y particularmente entiendo el aprendizaje basado en ejemplos de c贸digo por mi nivel personal, es necesario explicar los conceptos previos de lo que se va a implementar que den contexto de la caracter铆stica de lenguaje (con un diagrama es suficiente), eso les hace a煤n mas enriquecedor el contenido explicado. Muy buen contenido!
Para simplificar, los middlewares basicamente son funciones que se ejecutan en cadena hasta que es ejecutado el metodo res.send() o res.json(). El objeto req trae la informacion del request (headers, datos que mando el usuario e informacion importante del cliente) pero este objeto tambien puede ser manipulado por el developer y agregarle propiedades que pueden ser usadas en los siguientes middlewares (por ejemplo informacion del usuario como su id, su nombre o email etc) y el objeto res (response) basicamente sirve para enviar la respuesta al cliente, next() unicamente se llama cuando de un middleware quieres brincar al siguiente, esto permite separar logica de la funcion principal, aqui les dejo un ejemplo de un middleware que valida si un usuario es adminfunction isAdmin(req, res, next) {聽 聽 *// Si el usuario no es administrador, redirigir a la p谩gina de inicio*聽 聽 if (!req.user || !req.user.isAdmin) {聽 聽 聽 聽 *return* res.redirect('/');聽 聽 }聽 聽 *// Si el usuario es administrador, continuar con la siguiente funci贸n middleware*聽 聽 next();} *async* function saveUser(req, res) {聽 聽 *//Guardar el usuario en la base de datos*聽 聽 *await* db.saveUser(req.body)聽 聽 res.send('Usuario guardado');} router.post('/saveUser', isAdmin, saveUser); ```js function isAdmin(req, res, next) { // Si el usuario no es administrador, redirigir a la p谩gina de inicio if (!req.user || !req.user.isAdmin) { return res.redirect('/'); } // Si el usuario es administrador, continuar con la siguiente funci贸n middleware next(); } async function saveUser(req, res) { //Guardar el usuario en la base de datos await db.saveUser(req.body) res.send('Usuario guardado'); } router.post('/saveUser', isAdmin, saveUser); ```Cada que un usuario ( o cualquier cliente que use HTTP) llame a /saveUser primero pasara por la funcion isAdmin, si no es admin no continua a guardar al usuario
![](https://static.platzi.com/media/user_upload/upload-9ebe81bd-6eb0-4cf9-b585-88452f477e8a.png)