9

Ich benutze Reagieren Router als root und alle Anfragen unter "/" sind angewiesen, Router zu reagieren. Und wenn react router festgestellt hat, dass die URL keiner der definierten Komponenten entspricht, wird sie mit der NoMatch-Komponente gerendert. Und hier geht das Problem, NoMatch gerendert wird und das ist was ich will, aber der Statuscode ist immer noch 200 statt 404. Und wenn meine CSS- oder JS-Dateien mit einem falschen URL platziert werden, reagiert der Router genauso, er antwortet mit 200 ! Und dann sagt mir die Seite, dass es ein Problem mit meinem Ressourcentyp gibt!Wie reagiert der Router mit 404 Statuscode?

Also, wie kann ich Reagieren Router verwenden, um alles in der "/" zu behandeln und immer noch 404 Fehler richtig behandeln (mit 404 Statuscode zu reagieren)?

Code in 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')); 

der servre Seite

router.use('/', function(req, res, next) { 
    res.render('index-react', { 
     title: 'some title' 
    }); 
    }); 
+0

Was haben Sie sich schon ausgedacht? Teilen Sie einige Code –

+0

Code wird jetzt – Liang

+0

Ich habe diese prop, aber reagieren Router nicht behandelt dies, es wird nicht Status 404 Fehler emittieren. Ist es möglich, einen 404-Statusfehler über Javascript auszulösen? – Liang

Antwort

2

Um dies zu tun, müssen Sie auch das Spiel auf dem Server ausgeführt werden, wenn eine Route Spiele zu sehen. Natürlich, wenn Sie dies tun, können Sie auch vollwertige Server-Side-Rendering tun! Konsultieren Sie die server rendering guide.

+3

Ich liebe die Ironie dieses Links zu einer 404 Seite gehen :-) – Philiiiiiipp

+0

Link für zukünftige mich aktualisiert: https://reacttraining.com/reacts-router/web/guides/server-rendering – eselk

10

Mit reagieren-Router 2.0.0 können Sie tun:

<Route path="*" component={NoMatch} status={404}/> 
5

Zen: Was ist der Fehlercode eines stillen Netzwerk?

Ich rätselte auch über diese Frage. In dem seltsamen Fall ändern Sie den HTTP-Fehlercode nicht. Wir denken, wir sollten, weil eine zufällige URL aufgerufen wurde, aber warum?

In einem SPA (Single Page Application) gibt es keinen Netzwerkverkehr, sondern nur das Wechseln der Fenster. Der HTTP-Fehlercode befindet sich in den Headern zum Bereitstellen einer neuen Seite, während sich der gesamte Inhalt in einem Namen <div> befindet, der eine neue Seite nicht neu lädt. Man müsste die Seite wegwerfen, eine neue Seite übertragen und rendern, um den Rückkehrcode 404 zu erhalten, und dann die Originalseite erneut senden, wenn der Benutzer weggeht.

Und es ist nur der Benutzer. Der 404-Fehlercode oder jeder andere HTTP-Code ist wirklich ein Hinweis für den Browser oder Dienst. Wenn der Anforderer ein Browser ist, erhält der Mensch eine bessere Anzeige, als der Browser bereitstellen könnte. Wenn der Anforderer ein Crawler ist, sucht er wahrscheinlich in nach 404. Wenn der Anforderer Ihre Website als API verwendet, warum ist das eine gute Sache?

Also die Antwort ist, dass wir die HTTP-Statuscodes aus Gewohnheit einstellen. Nicht.

Verwandte Themen