Heim > Web-Frontend > js-Tutorial > So migrieren Sie Ihre App von Express zu Fastify

So migrieren Sie Ihre App von Express zu Fastify

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-02-10 14:50:13
Original
677 Leute haben es durchsucht

How to Migrate Your App from Express to Fastify

Express war einst das beliebteste Framework für die Entwicklung von Webanwendungen mit node.js. Der Rahmen hat jedoch in den letzten Jahren die aktive Entwicklung verringert, was zu einer mangelnden Unterstützung für moderne JavaScript -Merkmale führte. Gleichzeitig entstehen viele neue Frameworks, die unterschiedliche Ansätze zur Entwicklung von Node.js anwenden, und Fastify ist einer davon.

In diesem Artikel wird untersucht, warum Fastify zu einer überzeugenden Alternative zur Entwicklung von Node.js -Webanwendungen geworden ist. Wir werden lernen, wie Sie vorhandenen Expressanwendungen von Grund auf neu einschreiben und stattdessen Schritt für Schritt zu Fastify wechseln. Nach dem Studium dieses Artikels können Sie Ihre vorhandenen Express -Anwendungen sicher migrieren und das Fastify -Framework ausnutzen.

Die folgenden Bedingungen müssen beim Lesen dieses Artikels erfüllt sein:

  • Mit dem Erstellen von grundlegenden Expressanwendungen, dem Definieren von Routing und der Konfiguration von Middleware vertraut.
  • Vertraut mit Ausführungsbefehlen im Terminal.
  • node.js & gt; = v14.13.0 ist installiert. Dies bietet uns eine gute Unterstützung für das ECMascript (ES) -Modul und ermöglicht es uns, auf höchstem Niveau aufzutragen. Die Codebeispiele in diesem Artikel verwenden die ES -Modulsyntax (Import / Export).

Alle Beispielcode in diesem Artikel finden Sie in GitHub und Sie können damit durchsuchen, herunterladen und experimentieren.

Die Videoversion dieses Artikels ist auch auf meiner Website verfügbar.

Schlüsselpunkte

  • Fastify bietet integrierte Überprüfung und Protokollierung, native asynchrone Unterstützung und automatische JSON-Parsing, Verbesserung der Entwicklungseffizienz und Anwendungsleistung im Vergleich zu Express.
  • fastify-express Plug-In erleichtert die allmähliche Migration von Express zu Fasty, indem die Verwendung von Express Middleware und Routing im Fastify-Framework ermöglicht wird.
  • Integrationstests sollten rahmenunabhängig sein, um sicherzustellen, dass sie vor und nach der Migration gültig bleiben und so den Testprozess vereinfachen.
  • Refactoring beinhaltet das Austausch von Expresscode durch Fastify-Äquivalente, z.
  • Der Migrationsprozess kann inszeniert werden, wobei zunächst Fasten in eine vorhandene Express -Anwendung integriert und dann die Express -Komponenten allmählich ersetzt werden.
  • Ersetzen Sie nach der Migration die Express Middleware von Drittanbietern durch das äquivalente Fastify-Plugin, um die Leistung und Funktionen von Fastify zu nutzen.

Die Vorteile der Migration von Express zu Fasten

Wenn Sie mithilfe von Express mit den Anwendungen von Node.js vertraut sind, fragen Sie sich möglicherweise, wie die Vorteile der Migration Ihrer vorhandenen Express -Anwendungen zu Fastying -Anwendungen sind. Hier sind einige wichtige Gründe, um die Migration zu berücksichtigen:

  • Überprüfung und Anmeldung aus der Box. Diese Funktionen sind normalerweise beim Erstellen von Webanwendungen erforderlich. Bei der Verwendung von Fastify müssen Bibliotheken für diese Aufgaben nicht ausgewählt und integriert werden, da es uns diese Funktionen bietet. Wir werden später in diesem Artikel mehr über diese Funktionen erfahren.

  • native Unterstützung für asynchrone Code. Fastify nativ verspricht das Versprechen und unterstützt Asynchronisation/wartet. Dies bedeutet, dass die Route für uns ungewöhnliche abgelehnte Versprechen erfasst. Dies ermöglicht es uns, asynchronen Code sicher zu schreiben. Es ermöglicht uns auch, einige präzise Dinge zu erledigen, z.

    <code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
    </code>
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  • automatisch analysieren und serialisieren JSON. Wir müssen Fastify nicht konfigurieren, um die JSON -Anforderungsbehörde zu analysieren, und wir müssen das Objekt auch nicht zur Reaktion mit JSON serialisieren. Es wird das alles automatisch für uns verarbeiten:

    <code>  app.get("/user/:id", async (request, reply) => {
        const name = request.body.name;
    
        reply.send({ user: { name } });
      });
    </code>
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  • Entwickler freundlich. Mit einer klaren und ausdrucksstarken API und einer hervorragenden Unterstützung für Typscript wurde Fastify mit dem Entwicklererlebnis entwickelt.

  • schnelle Geschwindigkeit. Wir möchten nicht, dass Frameworks in unseren Anwendungen die Quelle von Leistungs Engpässen sind. Die gute Nachricht ist, dass Fastify entwickelt wird, um eine hohe Leistung zu erzielen. Der Fastify -Benchmark zeigt, wie er mit anderen Web -Frameworks von Node.js verglichen wird.

  • aktiv entwickeln. Das Fastify -Framework steht aktiv. Release Verbesserungen und Fehler-/Sicherheitsbehebungen regelmäßig.

wie man API zuversichtlich migriert

Wir möchten sicher sein, dass es immer noch wie erwartet funktioniert, nachdem die Bewerbung auf Fastify migriert wurde. Eine Sache, die uns hilft, Fehler zu erkennen oder unerwartete Änderungen zu identifizieren, sind API -Integrationstests.

Integrationstests testet die Komponenten der Anwendung auf unterschiedliche Weise als Unit -Tests. Unit testet die Funktionalität der einzelnen Komponenten. Integrationstests ermöglicht es uns, das Verhalten mehrerer Komponenten zu überprüfen, die zusammenarbeiten.

Wenn wir API -Integrationstests für Express -Anwendungen schreiben, möchten wir nach der Migration der Anwendung auf Fasty -Migration denselben Test ausführen können. Beim Schreiben von Integrationstests für APIs müssen die folgenden Punkte berücksichtigt werden:

    Sie sollten nicht an einen bestimmten Rahmen gebunden sein. Wir möchten in der Lage sein, die gleichen Tests vor und nach der Migration durchzuführen, ohne die von uns verwendeten Tests oder Bibliotheken zu ändern.
  • Halten Sie es einfach. Zumindest sollten Integrationstests eine Anfrage an den von der API aufgedeckten Endpunkt stellen und überprüfen, ob eine Antwort zurückgegeben wurde, jedoch nicht oft mehr. Möglicherweise möchten wir nach spezifischen HTTP -Statuscodes oder Antwortheadern überprüfen, aber wir sollten versuchen, den Test so einfach wie möglich zu gestalten.
  • Wählen Sie die Tools aus, mit denen Sie vertraut sind. Es gibt viele verschiedene Tools, mit denen wir API -Tests erstellen und ausführen können. Es ist jedoch wichtig, Tools zu verwenden, mit denen wir vertraut sind. Um effektive Integrationstests zu schreiben, müssen wir in der Lage sein, HTTP -Anfragen auszustellen und Antworten von unserer API zu gründen. Im Allgemeinen benötigen wir nicht viele Bibliotheken oder Tools, um dies zu erreichen.
wir werden uns nicht mit dem Umsetzung von API -Integrationstests in diesem Artikel befassen. Sie sollten jedoch in Betracht ziehen, sie zu schreiben, bevor Sie Framework -Migrationen durchführen.

migrieren Sie mit Fastify-Express von Express zu Fasten

Die Idee, vorhandene Expressanwendungen in ein völlig anderes Framework zu migrieren, mag ziemlich entmutigend erscheinen. Glücklicherweise erstellte das Fastify -Team ein Plugin - Fastify -Express -, mit dem die Migrationspfade vereinfacht werden können.

Das Fastify-Express-Plugin fügt Fastify voll ausdrückliche Kompatibilität hinzu. Es bietet eine Verwendung () -Methode (), mit der wir unserem Fastify -Server Express Middleware und Routen hinzufügen können. Dies bietet uns die Möglichkeit, Teile unserer vorhandenen Express -Anwendung nach und nach zu migrieren, um sie zu fasten.

Dies ist ein Beispiel für einen Expressrouter:

<code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir können dann Fastify-Express verwenden, um unseren vorhandenen Express-Router zur Fastify-Serverinstanz hinzuzufügen:

<code>  app.get("/user/:id", async (request, reply) => {
    const name = request.body.name;

    reply.send({ user: { name } });
  });
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nach einem Moment werden wir die Details all dieser Arbeiten untersuchen, während wir die Anwendung auf Fasten migrieren.

Es ist wichtig zu beachten, dass die Verwendung des Fastify-Express-Plugins keine langfristige Lösung ist. Wenn wir die vollen Vorteile von Fastify erhalten möchten, müssen wir schließlich unseren expressspezifischen Anwendungscode migrieren. Das Fastify-Express-Plugin bietet uns jedoch die Möglichkeit, in Phasen zu migrieren.

Unser Beispiel Express -Anwendung

Wir erstellen eine Beispiel -Express -Anwendung und migrieren sie dann in die Verwendung des Fastify -Frameworks. Schauen wir uns nun seinen Code an.

Erforderliche Abhängigkeiten

Erstellen wir zuerst ein neues Projekt:

<code>// src/routes.js
const router = express.Router();

router.get("/:user_id", function getUser(request, response, next) {
  response.json({});
});

export default router;
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir werden diesen Befehl dann im Terminal ausführen, um die Abhängigkeiten zu installieren, die von unserer Express -Anwendung erforderlich sind:

<code>// src/server.js

import Fastify from "fastify";
import ExpressPlugin from "fastify-express";

import routes from "./routes.js";

const fastify = Fastify();

await fastify.register(ExpressPlugin);

fastify.use("/user", routes);

await fastify.listen(3000);
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen Sie schließlich Paket.json und fügen Sie die folgende Zeile über dem Abschnitt "Skripte" hinzu:

<code>mkdir express-to-fastify-migration
cd express-to-fastify-migration
npm init -y
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies ermöglicht es uns, das ES -Modul in unserer Anwendung zu laden.

Routing -Modul

Wir werden eine Express -Router -Instanz erstellen, mit der wir unsere Routing und Middleware zusammenfassen können. Router in Express können verwendet werden, um uns dabei zu helfen, Anwendungen in diskrete Module zu organisieren. Zum Beispiel haben wir möglicherweise einen Router für /Benutzerrouting und ein anderes für /Adressrouting. Wir werden später sehen, wie dies uns hilft, Express -Anwendungen zum Fasten zu streichen.

Erstellen wir eine Routerinstanz und fügen Sie etwas Middleware hinzu:

<code>npm install express cors
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im obigen Code haben wir zwei Express Middleware -Beispiele konfiguriert:

  • express.json (). Diese Middleware -Funktion ist in Express integriert. Es kümmert sich um die Parsen der JSON -Anfrage.
  • cors. Diese Middleware hilft uns, die CORS -Header zu unserer API -Antwort hinzuzufügen. Dadurch kann unsere API von der Webseite aufgerufen werden.

Diese Middleware -Tools werden gegen alle Anfragen ausgeführt, die von allen Routen gestellt werden, die wir auf diesem Router definieren.

Jetzt, wo wir die Middleware konfiguriert haben, können wir unseren Router den ersten Weg hinzufügen:

<code>"type": "module",
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In einer realen Anwendung wird die obige Funktion Routing -Handler die empfangenen Daten überprüfen und dann die Datenbank aufrufen, um einen neuen Benutzerdatensatz zu erstellen. In diesem Beispiel senden wir Daten, die als Antwortkörper empfangen werden.

Jetzt werden wir eine Route hinzufügen, um Benutzer abzurufen:

<code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie nach Post -Routing ruft der obige Routing -Handler normalerweise die Datenbank auf, um Benutzerdaten abzurufen. In diesem Beispiel haben wir jedoch ein Objekt für das Senden des Antwortkörpers hartcodiert.

Schließlich werden wir das Router -Objekt so exportieren, damit wir es in ein anderes Modul importieren können:

<code>  app.get("/user/:id", async (request, reply) => {
    const name = request.body.name;

    reply.send({ user: { name } });
  });
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

App -Modul

Jetzt erstellen wir ein App -Modul:

<code>// src/routes.js
const router = express.Router();

router.get("/:user_id", function getUser(request, response, next) {
  response.json({});
});

export default router;
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Modul definieren wir eine Funktion, die eine neue Express -Serverinstanz erstellt. Wir fügen dann das Router -Objekt zur Serverinstanz hinzu.

Servermodul

Schließlich erstellen wir ein Servermodul. Dieses Modul verwendet die im App -Modul definierte BuildApp () -Funktion, um eine neue Express -Serverinstanz zu erstellen. Anschließend startet unser Express -Server, indem Sie ihn so konfigurieren, dass Port 3000:

anhören:
<code>// src/server.js

import Fastify from "fastify";
import ExpressPlugin from "fastify-express";

import routes from "./routes.js";

const fastify = Fastify();

await fastify.register(ExpressPlugin);

fastify.use("/user", routes);

await fastify.listen(3000);
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Führen Sie unsere Anwendung

aus

Wir haben jetzt eine vollständige Runnable Express -Anwendung, die wir im Terminal ausführen können:
<code>mkdir express-to-fastify-migration
cd express-to-fastify-migration
npm init -y
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In einem anderen Terminal können wir Curl verwenden, um eine Anfrage an die API zu stellen, um zu bestätigen, ob es funktioniert:
<code>npm install express cors
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

wir sollten eine Antwort wie folgt erhalten:
<code>"type": "module",
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Migrieren Sie unsere Anwendung von Express auf Fastify

Jetzt haben wir eine vollwertige Express-Anwendung, die wir mit der Verwendung des Fastify-Frameworks migrieren werden.

Erforderliche Abhängigkeiten

Wir müssen drei Abhängigkeiten installieren:
  • Fastify Framework
  • Fastify-Express-Plugin
  • Fastify -Cors -Plugin - Dies ist eine portierte Version der Express CORS Middleware, die unsere Anwendung bereits verwendet

Lassen Sie uns diesen Befehl im Terminal ausführen, um sie zu installieren:
<code>// src/routes.js

import express from "express";
import cors from "cors";

const router = express.Router();

router.use(express.json());

router.use(cors({ origin: true }));
</code>
Nach dem Login kopieren

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Refactor unser App -Modul

Jetzt, da wir die Abhängigkeiten installiert haben, müssen wir unser App -Modul neu refactor. Wir werden es ändern in:
  • importieren Sie Fastify und Fastify-Express anstelle von Express
  • Erstellen Sie eine Fastify -Serverinstanz anstelle einer Express -Serverinstanz
  • Fügen Sie unser Express-Router-Objekt mithilfe des Fastify-Express-Plugin
zum Server hinzu.

<code>// src/routes.js

router.post("/", function createUser(request, response, next) {
  const newUser = request.body;

  if (!newUser) {
    return next(new Error("Error creating user"));
  }

  response.status(201).json(newUser);
});
</code>
Nach dem Login kopieren
so sehen wir nach, nachdem wir diese Änderungen vorgenommen haben:

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Sie werden im obigen Code feststellen, dass wir beim Erstellen einer Fastify -Server -Instanz die Option Logger übergeben. Dies ermöglicht die integrierte Protokollierungsfunktion von Fastify. Wir werden später mehr darüber erfahren.

Refactor unser Servermodul

<code>// src/routes.js

router.get("/:user_id", function getUser(request, response, next) {
  const user = {
    id: request.params.user_id,
    first_name: "Bobinsky",
    last_name: "Oso",
  };

  response.json(user);
});
</code>
Nach dem Login kopieren
Jetzt müssen wir unser Servermodul ändern, um mit der Fastify -Serverinstanz zu arbeiten:

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Da Fastify nativ das Versprechen unterstützt, können wir im obigen Code auf Warten verwenden und dann die integrierte Protokollierungsfunktion von Fastify verwenden, um Fehler zu erfassen und zu protokollieren.

Nächster Schritt

Unsere Bewerbung verwendet nun Fastify, um Anfragen zu streichen und Antworten zu senden. Es ist voll ausgestattet, aber unser Routing verwendet immer noch Express. Um voll auszudrücken, müssen wir unsere Routen auch auf Fastify migrieren.

Refactor unser Routing -Modul

Routing in Expressanwendungen ist in Expressroutern eingekapselt. Wir haben diesen Router mit einem Fastify -Plugin übertragen. Plug-In ist eine Funktion von Fastify, mit der wir das Routing und alle zugehörigen Funktionen zusammenfassen können.

Wir werden zunächst einige expressspezifische Zeilen entfernen, um unser Routing-Modul (src/routes.js) neu zu gestalten:

<code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dann müssen wir den Standardmodulexport in eine asynchrone Funktion ändern, die die Fastify -Serverinstanz akzeptiert. Dies ist die Grundlage des Fastify -Plugins. Der Rest des Codes in unserem Routing -Modul wird in diese Plugin -Funktion verschoben:

<code>  app.get("/user/:id", async (request, reply) => {
    const name = request.body.name;

    reply.send({ user: { name } });
  });
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Damit unsere Middleware und Routing mit Fastify arbeiten müssen, müssen wir uns ändern:

  • Router Referenz ändern zu Fastify
  • Ändern Sie die Routenhandlerfunktion in eine asynchrone Funktion
  • Ändern Sie die Routenhandler -Funktionsparameter von (Anfrage, Antwort, Weiter) in (Anfrage, Antwort)
  • Ändern Sie die Antwortreferenz auf Antwort
  • ändern Sie die Antwort.
  • Ändern Sie die nächste (Fehler-) Instanz, um Fehler
  • zu werfen

Nach all diesen Änderungen ist unser Routing -Modul jetzt ein Fastify -Plugin mit Fastify -Routing:

<code>// src/routes.js
const router = express.Router();

router.get("/:user_id", function getUser(request, response, next) {
  response.json({});
});

export default router;
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt müssen wir unser App -Modul (SRC/app.js) so ändern, dass das von uns exportierte Plugin aus dem Routing -Modul verwendet wird. Dies bedeutet, den Fastify.use () -Anruf mit einem Anruf zu ersetzen.register ():

<code>// src/server.js

import Fastify from "fastify";
import ExpressPlugin from "fastify-express";

import routes from "./routes.js";

const fastify = Fastify();

await fastify.register(ExpressPlugin);

fastify.use("/user", routes);

await fastify.listen(3000);
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Unser Beispiel für Express -Anwendung hat nur einen Router, sodass wir alle Routen in der Anwendung so migrieren können, dass sie Fastify gleichzeitig verwenden. Wenn wir jedoch eine größere Expressanwendung mit mehreren Routern hätten, könnten wir jeden Router migrieren, um Schritt für Schritt Schritt für Schritt zu schnappen.

Ersetzen Sie die Middleware durch Plug-in

Unsere Bewerbung ist in gutem Zustand und wir haben sie fast vollständig von Express zu Fastify migriert. Eine weitere Sache, die migriert werden muss: Unsere Verwendung des CORS Express Middleware -Pakets. Wir haben das Fastify-Cors-Plugin zuvor installiert und müssen es jetzt in unserer Anwendung hinzufügen, um die CORS Middleware zu ersetzen.

In unserem Routing -Modul (SRC/Routes.js) müssen wir den Import der CORS Middleware ersetzen:

<code>mkdir express-to-fastify-migration
cd express-to-fastify-migration
npm init -y
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dann müssen wir den Aufruf zu Fastyify.use () durch den Anruf an Fastify.register () ersetzen:

<code>npm install express cors
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass wir, wenn wir das Plugin mit Fastify registrieren, die Plugin -Funktions- und Optionobjekte als separate Parameter übergeben müssen.

Da wir die vom Fastify-Express-Plugin bereitgestellte Verwendung () nicht mehr verwenden, können wir sie vollständig aus unserer Anwendung entfernen. Lassen Sie uns dazu die folgenden Zeilen aus unserem App -Modul (src/app.js) löschen:

<code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Express -Abhängigkeiten löschen

Die Migration unserer Anwendung von Express to Fastify wurde abgeschlossen! Wir können nun expressbezogene Abhängigkeiten entfernen, indem wir diesen Befehl im Terminal ausführen:

<code>  app.get("/user/:id", async (request, reply) => {
    const name = request.body.name;

    reply.send({ user: { name } });
  });
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können die Unterschiede in diesen Codeänderungen auf GitHub anzeigen.

Führen Sie unsere migrierte Anwendung aus

aus

Jetzt, da wir die Anwendung vollständig migriert haben, ist es ein guter Zeitpunkt, um zu überprüfen, ob noch alles wie erwartet funktioniert. Lassen Sie uns den gleichen Befehl ausführen, den wir zuvor ausgeführt haben, als die Anwendung Express verwendete.

Erstens werden wir die Anwendung im Terminal ausführen:

<code>// src/routes.js
const router = express.Router();

router.get("/:user_id", function getUser(request, response, next) {
  response.json({});
});

export default router;
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dann werden wir in einem anderen Terminal Curl verwenden, um eine Anfrage an die API zu stellen, um zu bestätigen, dass es wie erwartet funktioniert:

<code>// src/server.js

import Fastify from "fastify";
import ExpressPlugin from "fastify-express";

import routes from "./routes.js";

const fastify = Fastify();

await fastify.register(ExpressPlugin);

fastify.use("/user", routes);

await fastify.listen(3000);
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

wir sollten eine Antwort wie folgt erhalten:

<code>mkdir express-to-fastify-migration
cd express-to-fastify-migration
npm init -y
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Middleware entfernen

Unser Beispiel für Express-Anwendung verwendet nur einige Middleware-Funktionen, aber unsere reale Express-Anwendung kann mehr verwenden. Wie wir sehen können, ermöglicht das Fastify-Express-Plugin die Verwendung von Express Middleware (falls erforderlich). Auf diese Weise können wir das Umschreiben unserer eigenen benutzerdefinierten Express -Middleware zum Fasty -Plugin verzögern. Aber wie ersetzen wir Express Middleware von Drittanbietern?

Zum Glück bietet Fastify ein gesundes Ökosystem von Plugins. Hier sind einige beliebte Express Middleware -Pakete, die wir durch das Fastify -Plugin ersetzen können:

  • cors ➜ Fastify-Cors
  • Helm ➜ Fastify-Helmet
  • cSurf ➜ Fastify-csrf
  • Express-Session ➜ Fastify-Server-Session
  • express-jwt ➜ fastify-jwt
  • http-irror ➜ Fastify-sensibler
  • servestatisch ➜ Fastify-static
  • Multer ➜ Fastify-Multer

Einige Fastify -Plugins sind direkte Anschlüsse oder Wrapper für ihre Express -Gegenstücke. Dies bedeutet, dass wir normalerweise nicht die an das Fastify -Plugin übergebenen Konfigurationsoptionen ändern müssen.

Sie finden eine vollständige Liste von Plugins auf der Seite Fastify -Ökosystem.

Nutze Fastify

voll ausnutzen

Jetzt, da wir uns mit Fastify durch Migrieren von Expressanwendungen kennengelernt haben, ist es an der Zeit, sich mit anderen Fastify -Funktionen zu befassen, von denen wir profitieren können.

Überprüfung

Fastify bietet Anforderungsüberprüfungsfunktion. Es verwendet AJV (ein weiteres JSON -Schema -Validator) im Hintergrund, mit dem wir Validierungsregeln mithilfe des JSON -Schemas definieren können.

Dies ist ein Beispiel für die Verwendung des JSON -Modus, um die Anforderungsbehörde auf einer Postroute zu überprüfen:

<code>npm install express cors
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Überprüfungsfehler werden automatisch formatiert und als JSON -Antwort gesendet:

<code>"type": "module",
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erfahren Sie mehr in der Dokumentation der Fastify -Überprüfung und Serialisierungsdokumentation.

Protokolldatensatz

Protokollierung in Node.JS -Anwendungen können die Leistung in Produktionsumgebungen negativ beeinflussen. Dies liegt daran, dass die Serialisierung und Übertragung von Protokolldaten an anderer Stelle (z. B. in Elasticsearch) viele Schritte umfasst. Eine hohe Optimierung in dieser Anwendung ist sehr wichtig.

Protokollierung der Protokollierung ist vollständig in Fastify integriert. Dies bedeutet, dass wir keine Zeit damit verbringen müssen, Holzfäller auszuwählen und zu integrieren. Fastify verwendet Fast und Flexible Logger: Pino. Es generiert Protokolle im JSON -Format:

<code>  app.get("/user/:id", async (request) => await getUser(request.params.id));
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir eine Fastify -Server -Instanz erstellen, können wir die Protokollierung aktivieren und die an Pino übergebenen Optionen anpassen. Fastify gibt dann die oben gezeigte Protokollnachricht automatisch aus. Die Logger -Instanz ist in einer Fastify -Serverinstanz verfügbar (z. B. Fastify.log.info ("...")) und alle Anforderungsobjekte (z. B. Request.log.info ("...")).

Erfahren Sie mehr in der Fastify -Protokollierungsdokumentation.

Fehlerbehandlung

Fastify bietet eine setErrorHandler () -Methode, mit der wir die Fehlerbehandlungsfunktion explizit angeben können. Dies unterscheidet sich von Express, wobei ein Fehler mit Middleware nur durch die von ihm akzeptierten Parameter unterschieden werden kann (Err, Req, Res, Weiter) und in einer bestimmten Reihenfolge hinzugefügt werden muss.

Für die vollständige Flexibilität können wir verschiedene Fastify -Fehlerhandler in verschiedenen Plugins angeben. Erfahren Sie mehr in der Fastify -Fehlerdokumentation.

Dekorateure

Dekoratoren sind eine leistungsstarke Funktion in Fastify, mit der wir Kernfasty -Objekte - wie unsere Fastify -Server -Instanz - sowie Anforderungs- und Antwortobjekte anpassen können. Hier ist ein Beispiel für einen einfachen Dekorateur:

<code>  app.get("/user/:id", async (request, reply) => {
    const name = request.body.name;

    reply.send({ user: { name } });
  });
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mit dem Dekorateur können wir Inhalte wie Datenbankverbindungen oder Motoren in der Fastify -Anwendung anzeigen. Erfahren Sie mehr in der Dokumentation des Fastify Decorators.

Schlussfolgerung

In diesem Artikel haben wir gelernt, wie man vorhandene Node.js -Anwendungen von Express zu Fasty migriert. Wir haben bereits erfahren, wie das Fastify-Express-Plugin uns dabei helfen kann, vorhandene Anwendungen allmählich zu migrieren. Auf diese Weise können wir von den von Fastify bereitgestellten Funktionen profitieren, auch wenn Teile unserer Anwendung weiterhin Express verwenden.

Folgende Ressourcen finden Sie möglicherweise nützlich, wenn Sie von Express zu Fastify migrieren:

  • Der Beispielcode in diesem Artikel. Erkunden Sie den Code und führen Sie die in diesem Artikel integrierte Anwendung aus.
  • Fastify -Dokumentation. Umfassende Dokumentation für das Fastify -Framework.
  • Fastify -Ökosystem. Fastify Plugin -Verzeichnis. Einfach zu finden Plugins zum Ersetzen von Express Middleware.
  • Fasty -Beispielanwendung. Beispielanwendung, die von einem der wichtigsten Betreuer von Fastify erstellt wurde. Es zeigt Kernfastfastkonzepte, Best Practices und Vorschläge.
  • Fastify Community Discord Server. Ein großartiger Ort, um Hilfe und Ratschläge zur Entwicklung von Anwendungen mit Fastify zu erhalten.

FAQs für die Migration von Express zu Fasten

Was ist der Hauptunterschied zwischen Express und Fasten?

Express und Fastify sind beide Node.js -Web -Frameworks, haben jedoch einige wichtige Unterschiede. Express ist ein minimalistisches Webanwendungs ​​-Framework, das eine einfache Schnittstelle zum Erstellen von Webanwendungen und APIs bietet. Es gibt es schon lange, mit einer riesigen Community und einer reichhaltigen Middleware. Fastify hingegen ist ein neueres Rahmen, das sich darauf konzentriert, das beste Entwicklererlebnis mit minimalem Overhead und einer leistungsstarken Plug-in-Architektur zu bieten. Es ist sehr schnell gestaltet, daher der Name, und Benchmarks zeigen, dass es mehr Anfragen pro Sekunde als Express bearbeiten kann.

Wie kann ich meine ausdrückliche Anwendung migrieren, um sie zu fasten?

Migrieren von Express zu Fastify enthält mehrere Schritte. Zunächst müssen Sie die Express -Instanz in der Anwendung durch eine Fastify -Instanz installieren und ersetzen. Sie müssen dann Express-spezifische Middleware durch Fastify-Plugin oder benutzerdefinierten Code ersetzen. Sie müssen auch Ihre Route aktualisieren, um das Routing -System von Fastify zu verwenden. Schließlich müssen Sie Ihren Fehlerbehandlungscode aktualisieren, um den Fehlerbehandlungsmechanismus von Fastify zu verwenden.

Kann ich Express Middleware in Fastify verwenden?

Fastify verfügt über ein eigenes Middleware-System, unterstützt jedoch auch Middleware im Express-Stil über das Plugin "Middie". Die Verwendung von Express Middleware in Fastify kann jedoch die Leistung beeinflussen. Es wird daher empfohlen, Fastify -Plugins oder benutzerdefinierte Code nach Möglichkeit zu verwenden.

Wie kann ich mit Fehlern mit Fastify umgehen?

Fastify verfügt über einen integrierten Fehlerbehandlungsmechanismus, mit dem Sie Fehler in Ihrer Anwendung behandeln können. Sie können benutzerdefinierte Fehlerhandler für eine bestimmte Route oder für die gesamte Anwendung definieren. Fastify unterstützt auch die Async/Awed -Syntax, wodurch Fehler direkter als Express behandelt wird.

Wie kann man Hooks in Fastify verwenden?

Hook ist eine leistungsstarke Funktion in Fastify, mit der Sie benutzerdefinierten Code in verschiedenen Phasen des Anforderungs-/Antwortlebenszyklus ausführen können. Sie können Hooks verwenden, um Anfragen oder Antworten zu ändern, Authentifizierung, Datensatzanforderungen und mehr auszuführen. Fastify unterstützt mehrere Haken, einschließlich "OnRequest", "Prehandler", "Onsend" und "OnResponse".

Wie verwenden Sie Plugins in Fastify?

Plugin ist eine wichtige Funktion von Fastify, mit der Sie die Funktionalität Ihrer Anwendung erweitern können. Sie können Plugins verwenden, um neue Funktionen hinzuzufügen, in andere Dienste zu integrieren oder die Anwendungslogik zusammenzufassen. Fastify verfügt über ein reichhaltiges Plugin -Ökosystem und Sie können auch eigene Plugins erstellen.

Wie kann man eine Route in Fastify definieren?

Fastify verfügt über ein leistungsstarkes Routing -System, das Parameter, Abfragestassen, Platzhalter usw. unterstützt. Sie können eine Route mithilfe der "Route" -Methode definieren, die ein Optionsobjekt akzeptiert, das die Methoden, URLs, Handler und andere Optionen der Route angibt.

Wie sende ich eine Antwort in Fastify?

In Fastify können Sie eine Antwort mit dem an den Routing -Handler übergebenen Objekt "Antwort" senden. Es gibt verschiedene Möglichkeiten, Antworten an das Objekt "Antwort" zu senden, einschließlich "Senden", "Code", "Header" und "Typ". Fastify serialisiert auch automatisch die JSON -Antworten für die Leistung.

Wie kann ich die Überprüfung in Fastify durchführen?

Fastify unterstützt die Anforderung und Antwortüberprüfung mithilfe von JSON -Schema. Sie können Muster für Routen definieren, und Fastify überprüft automatisch eingehende Anforderungen und ausgehende Antworten anhand dieser Muster. Dies hilft, Fehler frühzeitig zu erkennen und die Anwendungszuverlässigkeit zu verbessern.

Wie verbessert Fastify die Leistung?

Fastify ist so konzipiert, dass er schnell und effizient ist. Es verwendet eine leichte Architektur, unterstützt HTTP/2 und HTTP/3 und verfügt über ein leistungsstarkes Plug-in-System, das den Overhead minimiert. Fastify serialisiert auch automatisch JSON -Antworten und unterstützt die Anforderung und Antwortüberprüfung, wodurch die Leistung verbessert wird.

Das obige ist der detaillierte Inhalt vonSo migrieren Sie Ihre App von Express zu Fastify. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage