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.
-
Módulo 1 | 7 clases
Introducción
expand_more-
play_circle_outline
Clase 1
1.- Introducción al proyecto del curso
-
play_circle_outline
Clase 2
Requisitos previos para tomar este curso
-
play_circle_outline
Clase 3
Qué cubriremos en este curso
-
play_circle_outline
Clase 4
Descripción del proyecto
-
play_circle_outline
Clase 5
Configurar entorno de trabajo (Windows)
-
play_circle_outline
Clase 6
Configurar entorno de trabajo (MacOS)
-
play_circle_outline
Clase 7
Crea tu primer servidor web
-
-
Módulo 2 | 6 clases
Conceptos Fundamentales
expand_more-
play_circle_outline
Clase 1
Cómo funciona un servidor web.
-
play_circle_outline
Clase 2
Servidor de archivos estáticos
-
play_circle_outline
Clase 3
Enviar JSON
-
play_circle_outline
Clase 4
JSON Viewer para Chrome
-
play_circle_outline
Clase 5
Nodemon para recargar el servidor
-
play_circle_outline
Clase 6
Rutas POST y Postman
-
-
Módulo 3 | 10 clases
Bases de Datos y CRUDs
expand_more-
play_circle_outline
Clase 1
Generar app con Express
-
play_circle_outline
Clase 2
Recorridode una app generada por el Express Generator
-
play_circle_outline
Clase 3
Configurar la base de datos
-
play_circle_outline
Clase 4
Modelos en Mongoose
-
play_circle_outline
Clase 5
REST y Verbos HTTP
-
play_circle_outline
Clase 6
Crear lugares
-
play_circle_outline
Clase 7
Mostrar lugares
-
play_circle_outline
Clase 8
Mostrar un lugar
-
play_circle_outline
Clase 9
Actualizar lugar
-
play_circle_outline
Clase 10
Eliminar lugares
-
-
Módulo 4 | 15 clases
Más allá de lo básico
expand_more-
play_circle_outline
Clase 1
Crear rutas
-
play_circle_outline
Clase 2
Controladores
-
play_circle_outline
Clase 3
Paginación
-
play_arrow
Clase 4
Qué es un Middleware en Express
-
play_circle_outline
Clase 5
Middleware para búsqueda individual
-
play_circle_outline
Clase 6
Configurar cloudinary
-
play_circle_outline
Clase 7
Definir archivo con secretos
-
play_circle_outline
Clase 8
Subir imágenes a cloud
-
play_circle_outline
Clase 9
Subir imágenes pt 2
-
play_circle_outline
Clase 10
Mover imágenes a la nube
-
play_circle_outline
Clase 11
Guardar información de las imágenes en la base de datos
-
play_circle_outline
Clase 12
Generar SEO URLs
-
play_circle_outline
Clase 13
Evitar colisiones con las SEO URls
-
play_circle_outline
Clase 14
Cambiar búsqueda de ID a Slug
-
play_circle_outline
Clase 15
Manejo de parámetros
-
-
Módulo 5 | 6 clases
Autenticación de usuarios
expand_more-
play_circle_outline
Clase 1
Modelo de usuarios
-
play_circle_outline
Clase 2
Encriptar contraseñas con bcrypt
-
play_circle_outline
Clase 3
Crear usuarios
-
play_circle_outline
Clase 4
Generar Json Web Tokens
-
play_circle_outline
Clase 5
Iniciar sesión
-
play_circle_outline
Clase 6
Asignar al primer usuario permisos de administrador
-
-
Módulo 6 | 5 clases
Relaciones básicas uno a muchos
expand_more-
play_circle_outline
Clase 1
Agregar campo usuario a un lugar
-
play_circle_outline
Clase 2
Proteger rutas con autenticación
-
play_circle_outline
Clase 3
Crear lugares con un usuario
-
play_circle_outline
Clase 4
Virtuales para obtener los lugares que creé
-
play_circle_outline
Clase 5
Proteger rutas para usuarios propietarios
-
-
Módulo 7 | 9 clases
Relaciones muchos a muchos
expand_more-
play_circle_outline
Clase 1
Crear modelo Favoritos
-
play_circle_outline
Clase 2
CRUD Favoritos
-
play_circle_outline
Clase 3
Virtuales para relaciones muchos a muchos
-
play_circle_outline
Clase 4
Crear modelo de Visitas
-
play_circle_outline
Clase 5
Enums
-
play_circle_outline
Clase 6
CRUD de Visitas
-
play_circle_outline
Clase 7
Visitas a través de negocios
-
play_circle_outline
Clase 8
Visitas de un negocio
-
play_circle_outline
Clase 9
Visitas de un usuario
-
-
Módulo 8 | 11 clases
Seguridad en servicios web
expand_more-
play_circle_outline
Clase 1
Modelo Aplicaciones (Clientes)
-
play_circle_outline
Clase 2
Asignar valores random a secret y applicationId
-
play_circle_outline
Clase 3
Crear aplicaciones
-
play_circle_outline
Clase 4
Eliminar aplicaciones
-
play_circle_outline
Clase 5
Rutas exclusivas de administradores
-
play_circle_outline
Clase 6
Proteger rutas con secretos
-
play_circle_outline
Clase 7
Preflight en CORs
-
play_circle_outline
Clase 8
Proteger rutas con ApplicationId
-
play_circle_outline
Clase 9
Encabezados para CORs
-
play_circle_outline
Clase 10
Dominios enlazados para una aplicación
-
play_circle_outline
Clase 11
Proteger de dominios no autorizados
-