9

Używam routera reagowania jako root, a wszystkie żądania pod "/" są kierowane do routera reagowania. A gdy router zareaguje, że URL nie jest dopasowany do żadnego ze zdefiniowanych komponentów, renderuje się komponentem NoMatch. I tu pojawia się problem, NoMatch jest renderowany i tego właśnie chcę, ale kod statusu wciąż wynosi 200 zamiast 404. A kiedy moje pliki css lub js są umieszczone z niewłaściwym adresem URL router reaguje tak samo, odpowiada 200 ! A następnie strona informuje mnie, że jest jakiś problem z moim typem zawartości zasobów!Jak zezwolić routerowi na reagowanie za pomocą kodu statusu 404?

Jak zatem korzystać z routera reagowania, aby obsłużyć wszystko w "/" i nadal otrzymywać poprawnie błędy 404 (w odpowiedzi na kod statusu 404)?

kod w drużynie reagują routera

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

servre

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

Co już wymyśliłeś? Udostępnij kod –

+0

kod jest teraz obsługiwany – Liang

+0

Dodałem, że rekwizyt, ale router reagujący tego nie obsłużył, to nie wyemituje błędu statusu 404. Czy możliwe jest wysyłanie błędu statusu 404 przez javascript? – Liang

Odpowiedz

2

Aby to zrobić, trzeba uruchomić meczu na serwerze, a także, aby sprawdzić, czy dopasowania trasy. Oczywiście, jeśli masz zamiar to zrobić, możesz również zrobić pełnowartościowe renderowanie po stronie serwera! Skonsultuj się z server rendering guide.

+3

Uwielbiam ironię tego linka przechodząc na stronę 404 :-) – Philiiiiiipp

+0

zaktualizowany link dla przyszłej mnie: https://reacttraining.com/react-router/web/guides/server-rendering – eselk

10

Z reagować-router 2.0.0 można zrobić:

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

Zen: Jaki jest kod błędu z niemym sieci?

Zaskoczyło mnie również to pytanie. Dziwny przypadek, nie zmieniasz kodu błędu HTTP. Uważamy, że powinniśmy, ponieważ wywołano losowy adres URL, ale dlaczego?

W SPA (Single Page Application) nie występuje ruch sieciowy, a jedynie przełączanie paneli. Kod błędu HTTP znajduje się w nagłówkach służących do wyświetlania nowej strony, podczas gdy cała zawartość ma nazwę <div>, która nie ładuje nowej strony. Należy wyrzucić stronę, przesłać i wyrenderować nową stronę, aby uzyskać kod powrotu 404, a następnie wysłać ponownie oryginalną stronę, gdy użytkownik odejdzie.

I to jest tylko użytkownik. Kod błędu 404 lub jakikolwiek inny kod HTTP jest naprawdę wskazówką dla przeglądarki lub usługi. Jeśli requester jest przeglądarką, człowiek ma lepsze wskazanie niż może zapewnić przeglądarka. Jeśli requester jest robotem indeksującym, prawdopodobnie skanuje on 404 w <h1>. Jeśli requester używa Twojej witryny jako interfejsu API, dlaczego jest to dobre?

Odpowiedź jest więc taka, że ​​ustalamy kody statusu HTTP z przyzwyczajenia. Nie rób tego.