Drücken Sie den Status 404 mit react-router

8

Ich habe einen Express-Server, der Folgendes handhabt: 1 API-Route und Rendering meiner anfänglichen index.html , um bundle.js in meine React / React-Router / Redux-Anwendung aufzunehmen.

Wie es aussieht, ist es unmöglich, auf meiner Webseite 404 zu finden, da ich einen Haken habe:

%Vor%

Damit react-router 's NoMatch funktionieren kann, muss ich einen 404 Code senden.

Meine Routen sind wie folgt:

Express - /api/test/:x/:y

React Router - :x/ , :x/:y

Was ich im Wesentlichen versuche zu erreichen, ist, wenn der Benutzer jemals zu einer URL von: :x/:y/z/and/further geht, dann gebe 404 zurück, es sei denn ist, was er gemacht hat, /api/test/:x/:y

Fragen:

  1. Wie kann ich Routen, ausschließlich meiner API-Routen, möglichst skalierbar zuordnen und entsprechende Statuscodes zurückgeben?
  2. Gibt es für etwas so Einfaches einen erheblichen Overhead bei der Einrichtung einer Subdomain? Würde das das Problem sogar lindern? Würde ich Probleme bekommen, wenn die App wächst?
speak 20.02.2016, 13:46
quelle

4 Antworten

4

Sehen Sie sich die serverseitigen Rendering-Dokumente des react-routers an: Ссылка

Lösung:

  1. Extrahiere Routen, um Dateien zu trennen und benötige sie in der Express-App
  2. Fügen Sie in der Express-App eine Middleware hinzu, die die URL in express mit match function von react-router überprüft. Es sollte nach Middleware geschrieben werden, dass verantwortlich für API-Routen.
  3. Falls es keine geeigneten Routen für die Anfrage-URL gibt, antworten Sie mit 404.

Middleware sollte also ähnlich aussehen:

%Vor%

Wenn sich Routen ändern, müssen Sie in der Express-App nichts tun, da Sie den gleichen Code für das Frontend und Backend verwenden.

    
Timur Bilalov 29.02.2016, 11:38
quelle
0

Sie müssen Ihre tatsächlichen API-Routen oberhalb Ihres Catch-Alls platzieren, so dass sie davor aufgenommen werden.

Grundsätzlich haben die zuerst definierten Middlewares Vorrang vor der Komplexität der Route.

Sobald eine Antwort an den Client gesendet wird, beendet Express die Verarbeitung der Middleware, es sei denn, es wird ein Fehler ausgegeben oder aus irgendeinem Grund wird next manuell aufgerufen.

Sie können einen einfachen Fehlerhandler wie folgt definieren:

%Vor%     
Will Morgan 20.02.2016 13:52
quelle
0

die router in express ist eine middleware also, die Reihenfolge ist sehr wichtig, wenn Sie Ihre Routen definieren. Um die API-Routen zu trennen, können Sie ein Modul erstellen, das diese behandelt, und dann middlewares erstellen, um andere Routen abzufangen, einschließlich einer für eine 404-Antwort. Vergessen Sie nicht, die api Routen zuerst zu setzen. Dies ist ein Beispiel:

%Vor%

Und das api Routenmodul:

%Vor%     
leobelizquierdo 24.02.2016 17:47
quelle
0

Klingt so, als könntest du einfach die Reihenfolge des Routers zu deinem Vorteil nutzen.

%Vor%

Auf diese Weise versucht die Anfrage /api/test und dann /something/something , wenn% ce_de% fehlschlägt.

    
James Harrington 29.02.2016 14:29
quelle