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:
Sehen Sie sich die serverseitigen Rendering-Dokumente des react-routers an: Ссылка
Lösung:
match
function von react-router
überprüft. Es sollte nach Middleware geschrieben werden, dass verantwortlich für API-Routen. 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.
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% 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:
Und das api Routenmodul:
%Vor%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.
Tags und Links javascript node.js express react-router http-status-code-404