7 points par GN⁺ 2024-10-20 | 4 commentaires | Partager sur WhatsApp
  • 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-regexp est 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
  • 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 next depuis 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 urlencoded afin d’atténuer CVE-2024-45590 (valeur par défaut : 32)
    • Suppression du middleware combiné bodyParser() désormais obsolète
    • req.body n’est plus initialisé systématiquement à {}
    • La valeur par défaut de extended pour le parseur urlencoded passe à false
    • Ajout de la prise en charge de la compression de données sans perte Brotli
  • Suppression des signatures de méthode obsolètes

    • res.redirect('back') et res.location('back') : la chaîne magique 'back' n’est plus prise en charge. Utiliser explicitement req.get('Referrer') || '/' à la place
    • Signatures res.send(status, body) et res.send(body, status) : utiliser res.status(status).send(body)
    • Signature res.send(status) : pour une réponse de statut simple, utiliser res.sendStatus(status) ; pour envoyer un code de statut avec un corps optionnel, utiliser res.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

 
aer0700 2024-10-22

Ah, les promise sont enfin pris en charge. Nous utilisons encore beaucoup Express, donc c’est une bonne nouvelle haha ;

 
vipeen 2024-10-21

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.

 
chotnt741 2024-10-20

On peut enfin gérer les erreurs de promesse, mais à ce stade je ne vois pas vraiment pourquoi il faudrait encore l’utiliser.

 
GN⁺ 2024-10-20
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

    • Lorsqu’on utilise des expressions régulières, certains cas peuvent présenter un comportement en temps exponentiel lors de l’analyse de l’entrée. Cela peut être facilement évité en passant à un véritable moteur d’expressions régulières comme re2
    • On peut se référer à l’article de rsc intitulé "Regular Expression Matching Can Be Simple And Fast"
  • 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 latest

  • Remerciements à 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.