- Hace 10 años se registró el primer PR de v5, y por fin fue fusionado y publicado
- Es un lanzamiento intencionalmente simplificado para implementar cambios de mayor impacto en futuras versiones
- También busca mostrarle al ecosistema de Node.js que Express está en movimiento otra vez
Cambios principales
-
Cambios en el soporte de versiones de Node.js
- Se dejó de dar soporte a Node.js 0.10 y ahora se requiere Node 18 o superior
- Esto resuelve el problema de que el soporte para versiones anteriores de Node.js retrasaba cambios importantes de rendimiento y mantenimiento
- Ahora es posible adoptar nuevas funciones del lenguaje y del runtime, y eliminar dependencias que ya no son necesarias
- Reconociendo las dificultades de las empresas que usan versiones antiguas de Node.js, se asociarán con HeroDevs para ofrecer "soporte indefinido" con parches de seguridad críticos incluso después del fin de soporte de v4
-
Cambios en coincidencia de rutas y expresiones regulares
- La librería
path-to-regexpse actualizó de 0.x a 8.x, integrando varios años de cambios - Se dejó de dar soporte a subexpresiones regulares (por ejemplo:
/:foo(\\d+))- Se eliminaron para prevenir ataques ReDoS
- Cómo migrar: se recomienda usar una librería sólida de validación de entradas
- Se incluyen patrones simplificados para patrones de ruta comunes
:name?cambió a{:name}*cambió a*name(,),[,],?,+,!se agregaron como caracteres reservados
- Se dejó de dar soporte a parámetros numéricos posicionales. Ahora todos los parámetros deben tener nombre
- La librería
-
Soporte para Promise
- Se agregó soporte para Promise rechazadas por errores ocurridos en middleware
- No incluye llamar a
nextdesde una Promise resuelta - En la mayoría de los casos, ahora se puede escribir middleware así:
app.use(async (req, res, next) => { req.locals.user = await getUser(req); next(); });
-
Cambios en body parser
- Se agregó una opción para personalizar la profundidad del body
urlencodedcomo mitigación para CVE-2024-45590 (valor predeterminado: 32) - Se eliminó el middleware combinado
bodyParser()que ya estaba en desuso req.bodyya no se inicializa siempre como{}- El valor predeterminado de
extendeden el parserurlencodedcambió a false - Se agregó soporte para compresión de datos Brotli sin pérdida
- Se agregó una opción para personalizar la profundidad del body
-
Eliminación de firmas de métodos obsoletas
res.redirect('back')yres.location('back'): ya no se admite la cadena mágica'back'. En su lugar, usar explícitamentereq.get('Referrer') || '/'- Firmas
res.send(status, body)yres.send(body, status): usarres.status(status).send(body) - Firma
res.send(status): para respuestas simples de estado usarres.sendStatus(status), y para enviar un código de estado con body opcional usarres.status(status).send() - También se eliminaron otras firmas de métodos obsoletas (ver la guía de migración para más detalles)
-
Guía de migración y seguridad
- Se proporciona una guía de migración detallada para desarrolladores que migren de v4 a v5
- También se ofrece un modelo de amenazas integral con información importante sobre áreas como validación de entradas del usuario y prácticas de seguridad para un uso seguro y confiable de Express
Opinión de GN⁺
- Express v5 es una versión enfocada en mostrarle al ecosistema de Node.js que Express está avanzando de nuevo. Se centra en dejar atrás el soporte para versiones antiguas de Node.js, resolver problemas de seguridad y simplificar el mantenimiento
- Este lanzamiento se mantuvo intencionalmente simple para eliminar obstáculos en el ecosistema y permitir cambios más significativos en futuras versiones
- Express mantiene la filosofía de ser un framework web rápido, no dogmático y minimalista para Node.js. Esto aporta ideas importantes en áreas como validación de entradas del usuario y prácticas de seguridad
- Se ofrecen una guía detallada para migrar a Express v5 y un modelo de amenazas integral para ayudar a los desarrolladores a usar Express de forma segura y estable
- Los nuevos mantenedores del proyecto Express tienen como objetivo convertir el ecosistema de Express en una herramienta estable y confiable. Para lograrlo, planean colaborar con la comunidad para resolver problemas y seguir mejorando
4 comentarios
Ah, por fin soporta promesas. Nosotros todavía usamos mucho Express jaja; es una buena noticia.
La mayoría ya se pasó a nestjs, así que casi no hay ocasiones para usarlo directamente. Es prácticamente lo mismo que usar un servlet directamente.
Por fin ya se pueden manejar los errores de promesas, pero a estas alturas no veo muy bien una razón de peso para usarlo.
Comentarios en Hacker News
Quiero expresar mi agradecimiento a Wes y al equipo. Tuve que leer dos veces que el PR de v5 lleva abierto 10 años. Debió haber hecho falta un esfuerzo enorme para cambiar la inercia de este proyecto. Felicidades por este nuevo capítulo
Felicidades al equipo de Express. Hay muchos otros frameworks de servidores web para Node JS, pero no me cambié a otro porque Express ofrece todo lo que necesito. Espero que esto siga así
Menciona que Express todavía no es
latestGracias a Wes y al equipo por su trabajo. Express sigue siendo la opción preferida en nodejs y da gusto ver que tiene mantenimiento activo
Se pregunta por qué el lanzamiento de v5 tardó nada menos que 10 años
Mención de perl 6
La idea de incluir la respuesta como parte de la entrada de la ruta parece muy de la década de 2010. Hoy en día, la mayoría de las cosas tienen rutas que reciben una solicitud y devuelven una respuesta. Esto encaja mejor con HTTP
Nunca había visto el modelo de "trasladar la versión anterior a una empresa privada para ofrecer soporte"
Se pregunta cómo se compara Express con koa, fastify, etc.