Madrid Filter: eine andere Route mit zwei Instagrammen

Ich möchte so etwas erreichen. / Products zeigt alle Produkte und / products /: category zeigt alle Produkte, die zu einer bestimmten Kategorie gehören. Um das zu erreichen, habe ich folgende Routen:

Problem

Wenn ich zwischen Kategorien umschalte, ist alles in Ordnung, wenn ich zwischen allen Produkten und Kategorieprodukten umschalte und umgekehrt, zeichnet Angular die Komponenten neu und es kommt zu einem Flackern.

Die endgültige Version von Angular 2 Router enthält, wie ich weiß, kein Regex. Fehlt mir etwas oder ist dies vorerst die einzige Lösung?

Vollständige Erklärung

Methode: Derzeit werden die Optionen 'DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT' und 'OPTIONS' unterstützt. Es kann sich auch um eine Reihe von Methoden handeln.

URL: Der Pfad der URL, die mit dieser Route übereinstimmt (Alias: Pfad).

Schema: Ein Objekt, das die Schemata für die Anforderung und die Antwort enthält. Sie müssen im JSON-Schema-Format vorliegen. Weitere Informationen finden Sie hier.

  • body: Überprüft den Hauptteil der Anforderung, wenn es sich um einen POST oder einen PUT handelt.
  • Abfragezeichenfolge oder Abfrage: Überprüft die Abfragezeichenfolge. Dies kann ein vollständiges JSON-Schema-Objekt sein, mit dem Eigenschaftstyp des Objekts und dem Eigenschaftsobjekt der Parameter, oder einfach den Werten dessen, was im Eigenschaftsobjekt enthalten wäre (siehe unten).
  • params: Überprüft die Parameter.
  • Antwort: Filtern und generieren Sie ein Schema für die Antwort. Wenn Sie ein Schema festlegen, können Sie den Durchsatz um 10-20% erhöhen.

attachValidation: füge validationError hinzu, um anzufordern, ob ein Schemaüberprüfungsfehler vorliegt, anstatt den Fehler an die Fehlerbehandlungsroutine zu senden.

onRequest (Anfrage, Antwort, erledigt): eine Funktion, sobald eine Anfrage eingeht, kann es sich auch um ein Array von Funktionen handeln.

preValidation (request, reply, done): Eine Funktion, die nach den gemeinsam genutzten preValidation-Hooks aufgerufen wird. Diese Funktion ist nützlich, wenn Sie beispielsweise eine Authentifizierung auf Routenebene durchführen müssen. Sie kann auch ein Array von Funktionen sein.

preHandler (request, reply, done): Eine Funktion, die direkt vor dem Request-Handler aufgerufen wird. Sie kann auch ein Array von Funktionen sein.

preSerialization (Request, Reply, Payload, Done): Eine Funktion, die kurz vor der Serialisierung aufgerufen wird. Sie kann auch ein Array von Funktionen sein.

Handler (Anfrage, Antwort): Die Funktion, die diese Anfrage bearbeitet.

schemaCompiler (Schema): Die Funktion, die das Schema für die Validierungen erstellt. Siehe hier

bodyLimit: Verhindert, dass der Standard-JSON-Parser Anforderungskörper analysiert, die größer als diese Anzahl von Bytes sind. Muss eine ganze Zahl sein. Sie können diese Option auch global festlegen, wenn Sie die Fastify-Instanz zum ersten Mal mit fastify (options) erstellen. Der Standardwert ist 1048576 (1 MiB).

logLevel: Legt die Protokollstufe für diese Route fest. Siehe unten.

config: Objekt zum Speichern der benutzerdefinierten Konfiguration.

version: Eine semverkompatible Zeichenfolge, die die Version des Endpunkts definiert. Beispiel.

prefixTrailingSlash: Zeichenfolge, mit der festgelegt wird, wie die Übergabe / als Route mit einem Präfix behandelt wird.

  • both (Standard): Registriert sowohl / prefix als auch / prefix /.
  • Schrägstrich: Nur / Präfix / wird registriert.
  • kein Schrägstrich: Nur Registrierung / Präfix.

Anfrage wird in Anfrage definiert.

reply wird in Reply definiert.

Kurzangabe

Die obige Routenangabe ist mehr Hapi-wie, aber wenn du lieber eine Express / Restify Ansatz, wir unterstützen es auch:
fastify.get (Pfad, Optionen, Handler)
fastify.head (Pfad, Optionen, Handler)
fastify.post (Pfad, Optionen, Handler)
fastify.put (Pfad, Optionen, Handler)
fastify.delete (Pfad, Optionen, Handler)
fastify.options (Pfad, Optionen, Handler)
fastify.patch (Pfad, Optionen, Handler)

fastify.all (Pfad, Optionen, Handler) fügt allen unterstützten Methoden denselben Handler hinzu.

Der Handler kann auch über das options-Objekt versorgt werden:

Hinweis: Wenn der Handler sowohl in den Optionen als auch als dritter Parameter der Verknüpfungsmethode angegeben ist, wird ein doppelter Handlerfehler ausgegeben.

Url-Gebäude

Fastify unterstützt sowohl statische als auch dynamische URLs.
So registrieren Sie ein parametrisch Pfad verwenden Sie die Doppelpunkt vor dem Parameternamen. Zum Platzhalter benutze die Star. Denken Sie daran, dass statische Routen immer vor parametrischen Routen und Platzhaltern überprüft werden.

Auch Routen mit regulären Ausdrücken werden unterstützt. Beachten Sie jedoch, dass RegExp in Bezug auf die Leistung sehr teuer sind!

Innerhalb eines Schrägstrichs ("/") können mehrere Parameter definiert werden. Sowie:

Denken Sie in diesem Fall daran, den Bindestrich ("-") als Parametertrennzeichen zu verwenden.

Schließlich ist es mit RegExp möglich, mehrere Parameter zu haben.

In diesem Fall kann als Parametertrennzeichen jedes Zeichen verwendet werden, das nicht mit dem regulären Ausdruck übereinstimmt.

Eine Route mit mehreren Parametern kann sich negativ auf die Leistung auswirken. Bevorzugen Sie daher nach Möglichkeit die Einzelparameter-Methode, insbesondere auf Routen, die sich auf dem Hot-Path Ihrer Anwendung befinden. Wenn Sie daran interessiert sind, wie wir mit dem Routing umgehen, überprüfen Sie find-my-way.

Asynchrone Wartezeit

Sind Sie ein asynchroner / wartender Benutzer? Wir haben Sie abgedeckt!

Wie Sie sehen, rufen wir reply.send nicht auf, um die Daten an den Benutzer zurückzusenden. Sie müssen nur den Körper zurückgeben und schon sind Sie fertig!

Bei Bedarf können Sie die Daten auch mit reply.send an den Benutzer zurücksenden.

Wenn die Route eine Callback-basierte API umschließt, die reply.send () außerhalb der Versprechungskette aufruft, kann auf die Antwort gewartet werden:

Die Antwort funktioniert auch:

Warnung:

  • Wenn sowohl return value als auch reply.send (value) gleichzeitig verwendet werden, hat der erste Wert Vorrang, der zweite Wert wird verworfen und a warnen Das Protokoll wird auch ausgegeben, weil Sie zweimal versucht haben, eine Antwort zu senden.
  • Sie können nicht undefiniert zurückgeben. Weitere Details finden Sie unter Versprechen.

Versprich Auflösung

Wenn Ihr Handler eine asynchrone Funktion ist oder ein Versprechen zurückgibt, sollten Sie sich eines besonderen Verhaltens bewusst sein, das zur Unterstützung des Rückruf- und Versprechen-Kontrollflusses erforderlich ist. Wenn das Versprechen des Handlers mit undefined aufgelöst wird, wird es ignoriert, was dazu führt, dass die Anforderung hängt und ein Error Protokoll, das ausgegeben werden soll.

  1. Wenn Sie async / await oder promises verwenden möchten, aber einen Wert mit reply.send beantworten möchten:
    • Nicht Beliebigen Wert zurückgeben.
    • Nicht vergessen Sie, reply.send anzurufen.
  2. Wenn Sie async / await oder promises verwenden möchten:
    • Nicht Verwenden Sie reply.send.
    • Nicht Rückgabe undefiniert.

Auf diese Weise können wir sowohl den Callback-Stil als auch das asynchrone Warten mit minimalem Kompromiss unterstützen. Trotz der großen Freiheit empfehlen wir dringend, nur einen Stil zu verwenden, da die Fehlerbehandlung in Ihrer Anwendung auf einheitliche Weise erfolgen sollte.

Beachten: Jede asynchrone Funktion gibt ein Versprechen für sich zurück.

Routenpräfix

Manchmal müssen Sie zwei oder mehr verschiedene Versionen derselben API verwalten. Ein klassischer Ansatz besteht darin, allen Routen die API-Versionsnummer (z. B. / v1 / user) als Präfix zuzuweisen. Fastify bietet Ihnen eine schnelle und intelligente Möglichkeit, verschiedene Versionen derselben API zu erstellen, ohne alle Routennamen von Hand zu ändern. Routenpräfix. Mal sehen, wie es funktioniert:

Fastify wird sich nicht beschweren, da Sie denselben Namen für zwei verschiedene Routen verwenden, da das Präfix beim Kompilieren automatisch verarbeitet wird (Dies bedeutet auch, dass die Leistung überhaupt nicht beeinträchtigt wird!).

Jetzt haben Ihre Kunden Zugriff auf die folgenden Routen:

Sie können dies so oft tun, wie Sie möchten. Es wird auch für verschachtelte Register und Routenparameter unterstützt. Beachten Sie, dass diese Option bei Verwendung des Fastify-Plugins nicht funktioniert.

Behandlung von / Route innerhalb von Plugins mit Präfix

Die / route verhält sich unterschiedlich, je nachdem, ob das Präfix mit / endet oder nicht. Wenn wir als Beispiel ein Präfix / something / betrachten, wird das Hinzufügen einer / route nur mit / something / übereinstimmen. Wenn wir ein Präfix / something berücksichtigen, wird das Hinzufügen einer / route mit / something und / something / übereinstimmen.

Informationen zum Ändern dieses Verhaltens finden Sie oben unter der Routenoption prefixTrailingSlash.

Benutzerdefinierte Protokollebene

Es kann vorkommen, dass Sie in Ihren Routen unterschiedliche Protokollierungsstufen benötigen. Fastify erledigt dies auf sehr einfache Weise.
Sie müssen nur die Option logLevel an die Plugin-Option oder die Routenoption mit dem gewünschten Wert übergeben.

Beachten Sie, dass, wenn Sie den logLevel auf Plugin-Ebene festlegen, auch der setNotFoundHandler und der setErrorHandler betroffen sind.

Oder Sie können es direkt an eine Route übergeben:

Denken Sie daran, dass die benutzerdefinierte Protokollebene nur auf die Routen und nicht auf den globalen Fastify Logger angewendet wird, auf den über fastify.log zugegriffen werden kann

Standard

Bei Bedarf können Sie eine Versionsoption angeben, mit der Sie mehrere Versionen derselben Route deklarieren können. Die Versionierung sollte der Semverspezifikation folgen.
Fastify erkennt den Accept-Version-Header automatisch und leitet die Anforderung entsprechend weiter (erweiterte Bereiche und Vorabversionen werden derzeit nicht unterstützt).
Beachten Sie, dass die Verwendung dieser Funktion die Gesamtleistung des Routers beeinträchtigt.

Wenn Sie mehrere Versionen mit demselben Major oder Minor deklarieren, wählt Fastify immer die höchste Version, die mit dem Accept-Version-Header-Wert kompatibel ist.
Wenn die Anforderung nicht den Header Accept-Version enthält, wird ein 404-Fehler zurückgegeben.

Schau das Video: The Road to Madrid: Tottenham vs Liverpool Champions League Preview 0-2 2019 (Dezember 2019).