Explica cómo usar middleware pre y post en Mongoose para validación, auditoría y efectos controlados sin ocultar lógica crítica ni provocar ejecuciones inesperadas.
El middleware de Mongoose permite ejecutar lógica antes o después de operaciones sobre documentos, queries, models y aggregations. Es útil para comportamiento transversal cercano a persistencia, pero introduce ejecución implícita que puede ser difícil de rastrear.
Texto
operación
→ pre middleware
→ operación principal
→ post middleware
El tipo de hook determina qué representa this, qué datos están disponibles y qué operaciones lo activan.
Si el proceso cae después de guardar y antes del side effect, el efecto se pierde. Si el hook reintenta sin identidad, puede duplicarse. Para eventos confiables usa outbox y worker.
Pero un findOneAndUpdate podría escribir texto sin hashear si no está prohibido. Mejor acepta password en un caso de uso dedicado y nunca expongas passwordHash como campo actualizable genérico.
Las operaciones internas de un hook deben recibir la session cuando forman parte de una transacción. En document middleware puede obtenerse del documento bajo APIs compatibles; en query middleware, desde opciones.
Omitirla crea una escritura fuera de la transacción.
No envíes emails, publiques mensajes o cobres pagos directamente desde hooks. No existe garantía exactly-once y la transacción de MongoDB no incluye esos sistemas.
Patrón:
Texto
operación de dominio
→ guardar entidad + outbox
→ commit
→ worker procesa evento idempotente
Middleware global de tenant puede reducir repetición, pero esconder el scope es peligroso. Una query administrativa o agregación puede comportarse de forma inesperada.
La autorización debe ser visible en el caso de uso y validada por tests de aislamiento.
El middleware reduce repetición, pero oculta ejecución. Úsalo para transformaciones pequeñas y consistentes con la persistencia. Las reglas críticas, autorización y efectos externos deben permanecer explícitos. Todo hook necesita una matriz de operaciones, manejo de errores, sessions y pruebas.