Sortie d’Express v5 - une nouvelle ère pour le framework Node.js
(expressjs.com)- Le premier PR pour la v5 avait été ouvert il y a 10 ans, et il a enfin été fusionné puis publié
- Une sortie volontairement simplifiée afin de pouvoir mettre en œuvre des changements plus structurants dans les prochaines versions
- C’est aussi une manière de signaler à l’écosystème Node.js qu’Express est de nouveau en mouvement
Principaux changements
-
Changement de la prise en charge des versions de Node.js
- Fin du support de Node.js 0.10, avec un passage à une prise en charge de Node 18 et plus
- Cela résout le problème des changements importants pour les performances et la maintenance qui avaient été retardés à cause du support des anciennes versions de Node.js
- Cela permet d’adopter de nouvelles fonctionnalités du langage et du runtime, et de supprimer des dépendances devenues inutiles
- Conscient des difficultés des entreprises utilisant d’anciennes versions de Node.js, le projet prévoit, en partenariat avec HeroDevs, un « support indéfini » fournissant des correctifs de sécurité critiques après la fin de vie de la v4
-
Changements sur la correspondance des routes et les expressions régulières
- La bibliothèque
path-to-regexpest mise à jour de la version 0.x à 8.x, intégrant plusieurs années de changements - La prise en charge des sous-expressions régulières (ex.
/:foo(\\d+)) est supprimée- Suppression effectuée pour prévenir les attaques ReDoS
- Méthode de migration : il est recommandé d’utiliser une bibliothèque robuste de validation des entrées
- Des patterns simplifiés sont inclus pour les motifs de route courants
:name?devient{:name}*devient*name(,),[,],?,+,!sont ajoutés comme caractères réservés
- La prise en charge des paramètres numériques ordonnés est supprimée. Tous les paramètres doivent avoir un nom
- La bibliothèque
-
Prise en charge des Promise
- Ajout de la prise en charge des Promise rejetées à cause d’erreurs survenues dans le middleware
- Cela n’inclut pas l’appel de
nextdepuis une Promise résolue - Dans la plupart des cas, il est désormais possible d’écrire le middleware ainsi :
app.use(async (req, res, next) => { req.locals.user = await getUser(req); next(); });
-
Changements du body parser
- Ajout d’une option pour personnaliser la profondeur du body
urlencodedafin d’atténuer CVE-2024-45590 (valeur par défaut : 32) - Suppression du middleware combiné
bodyParser()désormais obsolète req.bodyn’est plus initialisé systématiquement à{}- La valeur par défaut de
extendedpour le parseururlencodedpasse à false - Ajout de la prise en charge de la compression de données sans perte Brotli
- Ajout d’une option pour personnaliser la profondeur du body
-
Suppression des signatures de méthode obsolètes
res.redirect('back')etres.location('back'): la chaîne magique'back'n’est plus prise en charge. Utiliser explicitementreq.get('Referrer') || '/'à la place- Signatures
res.send(status, body)etres.send(body, status): utiliserres.status(status).send(body) - Signature
res.send(status): pour une réponse de statut simple, utiliserres.sendStatus(status); pour envoyer un code de statut avec un corps optionnel, utiliserres.status(status).send() - D’autres signatures de méthode obsolètes ont également été supprimées (voir le guide de migration pour plus de détails)
-
Guide de migration et recommandations de sécurité
- Un guide de migration détaillé est fourni pour les développeurs passant de la v4 à la v5
- Un modèle de menace complet est également fourni, avec des éléments essentiels sur la validation des entrées utilisateur et les bonnes pratiques de sécurité pour utiliser Express de manière sûre
L’avis de GN⁺
- Express v5 est une version axée sur le fait de montrer à l’écosystème Node.js qu’Express est de nouveau actif. Elle se concentre sur l’abandon des anciennes versions de Node.js, la résolution de problèmes de sécurité et la simplification de la maintenance
- Cette version a été volontairement maintenue simple afin de lever les obstacles dans l’écosystème et de permettre des changements plus marquants dans les prochaines versions
- Express conserve sa philosophie de framework web rapide, minimaliste et non prescriptif pour Node.js. Cela fournit aussi des indications importantes sur des domaines comme la validation des entrées utilisateur et les pratiques de sécurité
- Un guide détaillé de migration vers Express v5 ainsi qu’un modèle de menace complet sont fournis pour aider les développeurs à utiliser Express de manière sûre et fiable
- Les nouveaux mainteneurs du projet Express visent à faire évoluer l’écosystème Express en un ensemble d’outils stable et fiable. Pour cela, ils prévoient de collaborer avec la communauté afin de résoudre les problèmes et d’apporter des améliorations
4 commentaires
Ah, les
promisesont enfin pris en charge. Nous utilisons encore beaucoup Express, donc c’est une bonne nouvelle haha ;La plupart des gens sont déjà passés à nestjs, donc on a rarement l’occasion de l’utiliser directement. C’est pratiquement comme utiliser les servlets en direct.
On peut enfin gérer les erreurs de promesse, mais à ce stade je ne vois pas vraiment pourquoi il faudrait encore l’utiliser.
Commentaires sur Hacker News
L’auteur souhaite exprimer sa gratitude à Wes et à l’équipe. Il a dû relire deux fois le fait que la PR de la v5 avait été ouverte il y a 10 ans. Il a probablement fallu un effort énorme pour changer l’inertie de ce projet. Félicitations pour ce nouveau chapitre
Félicitations à l’équipe Express. Il existe beaucoup d’autres frameworks de serveurs web Node JS, mais l’auteur n’est pas passé à autre chose parce qu’Express fournit tout ce dont il a besoin. Il espère que cela continuera ainsi
Mention qu’Express n’est pas encore
latestRemerciements à Wes et à l’équipe pour leur travail. Express reste toujours le choix préféré sur nodejs, et il est bon de voir une maintenance active
L’auteur se demande pourquoi la sortie de la v5 a pris 10 ans
Mention de perl 6
L’idée d’inclure la réponse comme une partie de l’entrée du chemin semble venir des années 2010. Aujourd’hui, la plupart des choses ont des routes qui reçoivent une requête et renvoient une réponse. Cela correspond mieux à HTTP
L’auteur n’avait jamais vu le modèle consistant à « transférer l’ancienne version à une entreprise privée pour fournir du support »
L’auteur se demande comment Express se compare à koa, fastify, etc.