7 Punkte von GN⁺ 2024-10-20 | 4 Kommentare | Auf WhatsApp teilen
  • Der erste v5-PR wurde vor 10 Jahren eingereicht, und nun wurde er endlich gemergt und veröffentlicht
  • Ein bewusst vereinfachtes Release, um in künftigen Releases wirkungsvollere Änderungen umsetzen zu können
  • Es soll dem Node.js-Ökosystem außerdem signalisieren, dass Express wieder in Bewegung ist

Wichtige Änderungen

  • Änderungen bei der Unterstützung von Node.js-Versionen

    • Unterstützung für Node.js 0.10 eingestellt, jetzt werden Node 18 und höher unterstützt
    • Damit wird das Problem gelöst, dass wichtige Änderungen bei Performance und Wartbarkeit durch die Unterstützung älterer Node.js-Versionen verzögert wurden
    • Neue Sprach- und Runtime-Funktionen können übernommen und nicht mehr benötigte Abhängigkeiten entfernt werden
    • Die Schwierigkeiten von Unternehmen mit älteren Node.js-Versionen werden anerkannt; in Partnerschaft mit HeroDevs soll auch nach dem Support-Ende von v4 „unbefristeter Support“ mit wichtigen Sicherheitspatches bereitgestellt werden
  • Änderungen bei Pfadabgleich und regulären Ausdrücken

    • Die Bibliothek path-to-regexp wurde von 0.x auf 8.x aktualisiert, wodurch Änderungen aus mehreren Jahren zusammengeführt wurden
    • Unterstützung für reguläre Unterausdrücke (z. B. /:foo(\\d+)) wurde entfernt
      • Entfernt, um ReDoS-Angriffe zu verhindern
      • Migrationsweg: Die Verwendung robuster Bibliotheken zur Eingabevalidierung wird empfohlen
    • Vereinfachte Muster für gängige Pfadpatterns sind enthalten
      • :name? wurde zu {:name} geändert
      • * wurde zu *name geändert
      • (, ), [, ], ?, +, ! wurden als reservierte Zeichen hinzugefügt
    • Unterstützung für geordnete numerische Parameter wurde entfernt. Alle Parameter müssen benannt werden
  • Promise-Unterstützung

    • Unterstützung für abgelehnte Promises, die durch Fehler in Middleware entstehen, wurde hinzugefügt
    • Das Aufrufen von next bei erfüllten Promises ist nicht eingeschlossen
    • In den meisten Fällen kann Middleware nun so geschrieben werden:
      app.use(async (req, res, next) => {  
        req.locals.user = await getUser(req);  
        next();  
      });  
      
  • Änderungen am Body-Parser

    • Eine Option zum Anpassen der urlencoded-Body-Tiefe wurde zur Abmilderung von CVE-2024-45590 hinzugefügt (Standardwert 32)
    • Die veraltete kombinierte Middleware bodyParser() wurde entfernt
    • req.body wird nicht mehr immer mit {} initialisiert
    • Der Standardwert von extended im urlencoded-Parser wurde auf false geändert
    • Unterstützung für verlustfreie Brotli-Datenkompression wurde hinzugefügt
  • Entfernung veralteter Methodensignaturen

    • res.redirect('back') und res.location('back'): Der magische String 'back' wird nicht mehr unterstützt. Stattdessen explizit req.get('Referrer') || '/' verwenden
    • Signaturen res.send(status, body) und res.send(body, status): res.status(status).send(body) verwenden
    • Signatur res.send(status): Für einfache Statusantworten res.sendStatus(status) verwenden; um einen Statuscode mit optionalem Body zu senden, res.status(status).send() verwenden
    • Weitere veraltete Methodensignaturen wurden entfernt (Details im Migrationsleitfaden)
  • Leitfäden für Migration und Sicherheit

    • Ein detaillierter Migrationsleitfaden für Entwickler, die von v4 auf v5 migrieren, wird bereitgestellt
    • Ein umfassendes Threat Model liefert wichtige Einblicke in Bereiche wie Eingabevalidierung und Security-Praktiken für einen sicheren Einsatz von Express

Meinung von GN⁺

  • Express v5 ist ein Release, das darauf ausgerichtet ist, dem Node.js-Ökosystem zu zeigen, dass Express wieder in Bewegung ist. Im Fokus stehen das Ende der Unterstützung älterer Node.js-Versionen, die Behebung von Sicherheitsproblemen und eine Vereinfachung der Wartung
  • Dieses Release wurde bewusst einfach gehalten, um Hindernisse im Ökosystem zu beseitigen und in kommenden Releases größere, wirkungsvollere Änderungen zu ermöglichen
  • Express verfolgt die Philosophie eines schnellen, meinungsfreien und minimalistischen Web-Frameworks für Node.js. Das liefert wichtige Erkenntnisse in Bereichen wie Eingabevalidierung und Security-Praktiken
  • Ein detaillierter Leitfaden für die Migration zu Express v5 sowie ein umfassendes Threat Model helfen Entwicklern, Express sicher und stabil einzusetzen
  • Die neuen Maintainer des Express-Projekts wollen das Express-Ökosystem zu einem stabilen und verlässlichen Werkzeug weiterentwickeln. Dazu wollen sie gemeinsam mit der Community Probleme lösen und Verbesserungen vorantreiben

4 Kommentare

 
aer0700 2024-10-22

Ah, endlich Unterstützung für Promises. Wir verwenden immer noch viel Express, haha; das sind gute Nachrichten.

 
vipeen 2024-10-21

Die meisten sind inzwischen zu NestJS gewechselt, daher hat man kaum noch Gelegenheit, es direkt zu verwenden. Das ist praktisch dasselbe, wie direkt mit Servlets zu arbeiten.

 
chotnt741 2024-10-20

Endlich kann man Promise-Fehler behandeln, aber ich sehe ehrlich gesagt keinen guten Grund, es jetzt noch unbedingt zu verwenden.

 
GN⁺ 2024-10-20
Hacker-News-Kommentare
  • Ich möchte Wes und dem Team meinen Dank aussprechen. Ich musste zweimal lesen, dass der v5-PR seit 10 Jahren offen ist. Es muss enormen Aufwand gekostet haben, die Trägheit dieses Projekts zu verändern. Glückwunsch zu diesem neuen Kapitel.

    • Bei der Verwendung regulärer Ausdrücke kann es Fälle geben, in denen das Parsen der Eingabe exponentielles Laufzeitverhalten zeigt. Das lässt sich leicht vermeiden, indem man auf eine echte Regex-Engine wie re2 umsteigt.
    • Man kann auf den Artikel von rsc mit dem Titel "Regular Expression Matching Can Be Simple And Fast" verweisen.
  • Glückwunsch an das Express-Team. Es gibt viele andere Node-JS-Webserver-Frameworks, aber ich bin nicht zu etwas anderem gewechselt, weil Express alles bietet, was ich brauche. Hoffentlich bleibt das so.

  • Es wird erwähnt, dass Express noch nicht latest ist.

  • Danke an Wes und das Team für ihre Arbeit. Express ist in nodejs immer noch die bevorzugte Wahl, und es ist gut zu sehen, dass es aktiv gepflegt wird.

  • Es wird gefragt, warum die Veröffentlichung von v5 ganze 10 Jahre gedauert hat.

  • Eine Erwähnung von perl 6.

  • Die Idee, die Antwort als Teil der Eingabe eines Pfads zu enthalten, wirkt wie etwas aus den 2010er Jahren. Heutzutage haben die meisten Dinge Pfade, die eine Anfrage entgegennehmen und eine Antwort zurückgeben. Das passt besser zu HTTP.

  • Ich habe noch nie ein Modell gesehen, bei dem man "das Vorherige auf ein Privatunternehmen überträgt, um Support anzubieten".

  • Es wird gefragt, wie sich Express im Vergleich zu koa, fastify usw. schlägt.