Wie reagieren die router reagieren darauf mit 404 status-code?
Ich bin mit reagieren router als Wurzel und alle Anfragen, die unter "/" gerichtet sind, zu reagieren-router. Und wenn reagieren router gefunden, dass die url nicht als übereinstimmung mit einer der definierten Komponenten, macht es mit NoMatch-Komponente. Und hier geht das problem, NoMatch gerendert wird, und das ist, was ich will, aber der status-code ist immer noch 200 statt 404. Und wenn meine css-oder js-Dateien befinden, mit einer falschen url zu reagieren-router macht das gleiche, antwortet er mit 200! Und dann wird die Seite sagt mir, dass es einige problem mit meinen Ressourcen Inhalt geben!
So, wie kann ich reagieren, router, alles zu behandeln, die "/" und noch bekommen, zur Behandlung von 404-Fehler direkt(reagieren mit 404 status-code)?
code reagieren-router
render((
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="archived" component={App}>
<IndexRoute component={ArchivedPage}/>
<Route path="project/:projectId" component={ArchivedDetailPage}/>
</Route>
<Route path="*" component={NoMatch}/>
</Route>
</Router>
), document.getElementById('app'));
den servre Seite
router.use('/', function(req, res, next) {
res.render('index-react', {
title: 'some title'
});
});
- Was haben Sie schon ausgedacht? Einige code
- code ist serviert, jetzt
- Ich fügte hinzu, dass prop, sondern reagieren-router nicht damit umgehen, es wird nicht emittieren status 404-Fehler. Ist es möglich, emittieren einen 404-status-Fehler via javascript?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit reagieren-router 2.0.0 können Sie tun:
EDIT:
Was Sie tun müssen, ist, um ein benutzerdefiniertes Attribut erstellen, die auf Ihrer route definition, wie Sie oben sehen können (status).
Wenn Sie zum Rendern Sie die Komponente auf server-Seite, überprüfen Sie auf dieses Attribut und sendet eine Antwort mit dem code dieses Attribut:
routes.js
server.js:
Tut mir Leid, dass... auf jeden Fall ist meine Lösung nicht funktioniert von selbst, und ich verpasste das richtige Stück code, wo Sie tatsächlich überprüfen Sie auf dieses Attribut und entsprechend Rendern.
Wie Sie sehen können, ich senden Sie einfach die "Nicht gefunden" - text an den client, allerdings wäre es am besten, wenn Sie fangen die Komponente für die Darstellung von renderProps (NoMatch in diesem Fall) und render es.
Cheers
status
parameter für? Ich kann nicht finden jede Bezugnahme auf Sie in der Dokumentation.Zen: Was ist der Fehlercode für einen silent-Netzwerk?
Ich verwirrt über diese Frage, wie auch. Der sonderbare Fall, Sie ändern Sie nicht den HTTP-Fehlercode. Wir denken, wir sollten, weil eine zufällige URL aufgerufen wurde, aber warum?
In einem SPA (Single Page Anwendung), gibt es nicht den Netzwerkverkehr, sondern nur Wechsel der Scheiben. Die HTTP-Fehler-code in die Header für die Zustellung einer neuen Seite steht, während der gesamte Inhalt ist in einer benannten
<div>
nicht neu laden einer neuen Seite. Würde man brauchen, werfen Sie-Seite, die übertragung und die Darstellung einer neuen Seite 404 code zurück, und dann senden Sie die original-Seite wieder, wenn der Benutzer bewegt sich Weg.Und nur der Benutzer. Die 404-error-code, oder jede andere HTTP-code, ist wirklich ein Hinweis an den browser oder eine Dienstleistung. Wenn der requester ist ein browser, der Mensch ist gegeben, eine bessere Indikation als die browser bieten könnte. Wenn der Anforderer einen crawler, ist es wahrscheinlich, scans für 404 in
<h1>
's. Wenn der requester mit Ihrer website als eine API, warum ist das eine gute Sache?Also die Antwort ist, dass wir den HTTP-status-codes aus Gewohnheit. Nicht.
Um dies zu tun, müssen Sie ausführen, um das match auf dem server als auch, um zu sehen, wenn Sie eine route entspricht. Natürlich, wenn Sie gehen, um dies zu tun, können Sie gut tun, vollwertiges server-side-rendering, wie gut! Konsultieren Sie die server-rendering-guide.
Ich habe einige Graben, dies ist, wie wir Dinge tun, in der v4 Version.
Den
Route
Komponente wird verwendet, um den Zugriff auf diestaticContext
die einestatusCode
Stütze, die Sie festlegen können, wenn Sie dieStaticRouter
Komponente zum Rendern auf dem server.Server-code sieht ungefähr so aus (mit einigen Typoskript Eingabe)