El concepto de middlewares es popular en muchos frameworks, de Desarrollo Web. Están por ejemplo los que dependen fuertemente del concepto como por ejemplo Express, los que lo usan detrás de cámaras o como una configuración avanzada, como lo hace Ruby on Rails, etc.
Un Middleware tiene como propósito tomar dos piezas de la aplicación y conectarlas, como un puente en el que fluye la información. Normalmente decimos que una rutina de código tiene como propósito recibir información y retornarla transformada, la única característica especial de un Middleware es que la información la obtiene de otra función de código para luego enviársela a una función distinta más.
Los middlewares en Express se montan por múltiples razones, una de ellas por ejemplo es validar la información antes de que llegue a la rutina que enviará respuesta hacia el cliente, también pueden usarse para hacer una consulta y guardar información antes de que pase a las funciones que responderán.
Un middleware en Express es una función, cuyo único distintivo es que recibe 3 argumentos:
function(req,res,next){}
Los primeros dos argumentos, como cualquier función que responde respuestas del cliente contiene la información de la solicitud en el primer argumento Request, y el objeto Response como segundo argumento, que nos sirve para modificar la respuesta que se enviará a el usuario.
El tercer argumento es muy importante, este es el que distingue un middleware de una función de respuesta. Este tercer argumento es una función que contiene el siguiente middleware o función a ejecutar luego de que el actual termine su ejecución.
Esta función next termina la ejecución de nuestro middleware y puede hacerlo de dos formas.
- Con éxito, la función next en este caso no recibe argumentos al ejecutarse, indicándole al siguiente punto de la ejecución que todo salió bien.
- Con un error, el error se envía como argumento de la función, indicando al siguiente punto de la ejecución que algo salió mal y no puede continuar con la respuesta de la petición del cliente.
Todo salió bien:
function miMiddleware(req,res,next){
next();
}
Enviamos un error en el middleware
function miMiddleware(req,res,next){
if(user.permisos != "admin"){
next(new Error('No tienes permisos para estar aquí'));
}
}
Estas funciones se montan en el proceso de respuesta a una petición usando el método use del objeto app
const express = require('express');
const app = express();
function miMiddleware(req,res,next){
next();
}
app.use(next) //Esto indica que antes de cualquier función de respuesta se debe ejecutar este middleware
O bien como parte de la respuesta de una ruta:
const express = require('express');
const app = express();
function miMiddleware(req,res,next){
next();
}
app.get('/',miMiddleware,function(req,res){
/* Se ejecutará esta función luego del middleware */
});
En ambos casos, es posible que podamos colocar cuantos middlewares queramos definir, lo importante es que cada uno llame la función next, sin argumentos, para que el siguiente middleware se ejecute hasta llegar a la función de respuesta.
Ahora, pasemos al siguiente tema donde veremos cómo integrar este conocimiento en nuestro proyecto.
-
check_circle_outlineMódulo 1 | 7 clases
Introducción
expand_more -
check_circle_outlineMódulo 2 | 6 clases
Conceptos Fundamentales
expand_more -
check_circle_outlineMódulo 3 | 10 clases
Bases de Datos y CRUDs
expand_more -
check_circle_outlineMódulo 4 | 15 clases
Más allá de lo básico
expand_more-
done_all
Clase 1
Crear rutas
-
done_all
Clase 2
Controladores
-
done_all
Clase 3
Paginación
-
done_all
Clase 4
Qué es un Middleware en Express
-
done_all
Clase 5
Middleware para búsqueda individual
-
done_all
Clase 6
Configurar cloudinary
-
done_all
Clase 7
Definir archivo con secretos
-
done_all
Clase 8
Subir imágenes a cloud
-
done_all
Clase 9
Subir imágenes pt 2
-
done_all
Clase 10
Mover imágenes a la nube
-
done_all
Clase 11
Guardar información de las imágenes en la base de datos
-
done_all
Clase 12
Generar SEO URLs
-
done_all
Clase 13
Evitar colisiones con las SEO URls
-
done_all
Clase 14
Cambiar búsqueda de ID a Slug
-
done_all
Clase 15
Manejo de parámetros
-
-
check_circle_outlineMódulo 5 | 6 clases
Autenticación de usuarios
expand_more -
check_circle_outlineMódulo 6 | 5 clases
Relaciones básicas uno a muchos
expand_more -
check_circle_outlineMódulo 7 | 9 clases
Relaciones muchos a muchos
expand_more -
check_circle_outlineMódulo 8 | 11 clases
Seguridad en servicios web
expand_more