Naprawianie niejawnych błędów 404

Aplikacje jednostronicowe mogą wyświetlać różne treści bez wczytywania nowej strony. W tym celu używają obsługi kliknięć w linkach i interfejsu History API. History API umożliwia manipulowanie historią sesji przeglądarki. Dzięki temu możemy zaktualizować adres URL podczas wyświetlania innej strony (zwykle nazywanej „widokiem” w przypadku aplikacji jednostronicowych). Sprawdza też, czy przycisk Wstecz w przeglądarce nadal działa zgodnie z oczekiwaniami.

Zapoznaj się z aplikacją jednostronicową w tym CodeLab. Pokazuje on obrazy przedstawiające kota lub psa oraz zawiera linki, które umożliwiają przełączanie się między tymi zwierzętami. Wygląda na to, że działa prawidłowo.

Odkrywanie podstępnych błędów 404

Niestety w aplikacji jest drobny błąd. Przyjrzyjmy się temu.

  • Aby wyświetlić podgląd strony, kliknij Wyświetl aplikację. Następnie kliknij Pełny ekranpełny ekran.
  • Kliknij link Doggos. Zwróć uwagę, jak zmienił się adres URL.
  • Ponownie załaduj aplikację.

Widzisz stronę z etykietą „Cannot GET /doggos” – podstępny błąd 404. Jest to „podstępne”, ponieważ aplikacja internetowa działa prawidłowo, dopóki klikasz tylko linki w jej obrębie. Nie działa, gdy używasz adresów URL w nowym oknie przeglądarki lub odświeżasz stronę. Problem polega na tym, że serwer nie wie, jak odpowiedzieć na żądanie dotyczące tych adresów URL. Kod JavaScript w naszej aplikacji internetowej korzysta z interfejsu History API do poruszania się między nimi, ale serwer nie wie, co z nimi zrobić. Gdy serwer nie wie, co zrobić z żądanym adresem URL, w odpowiedzi przesyła kod stanu HTTP 404. Ten kod oznacza, że serwer nie znalazł niczego dla żądanego adresu URL.

W tym przypadku wyszukiwarki nie zindeksują adresów URL, ponieważ użytkownik po kliknięciu wyniku wyszukiwania znajdzie komunikat o błędzie, ale nie znajdzie szukanej treści, np. zdjęć psa.

Naprawianie serwera

Ten projekt korzysta z serwera express.js napisanego w JavaScript. Naprawmy serwer, aby odpowiadał na żądania stroną index.html, a aplikacja jednostronicowa zajmie się resztą.

  • Kliknij Remix to Edit (Zmiksuj do edycji), aby umożliwić edycję projektu.
  • Wybierz plik server.js.

Ten plik zawiera kod serwera. Tworzy serwer express.js i wysyła treść pliku index.html. Trasa skonfigurowana w wierszu 15 obsługuje aplikację internetową tylko wtedy, gdy żądania są wysyłane pod adres URL /. Serwer powinien też obsługiwać inne utworzone przez nas adresy URL. Zmieńmy to, aby wyświetlać wszystkie adresy URL, aby w przyszłości działało to też z dodatkowymi adresami URL.

W tym celu możemy zmienić kod zaczynający się na linii 15 na taki:

app.get('/*', function(request, response) {
  response.sendFile(__dirname + '/views/index.html');
});

/* pasuje do dowolnego adresu URL, a serwer w przypadku dowolnego adresu URL odpowiada teraz aplikacji internetowej w polu index.html.

  • Aby wyświetlić podgląd strony, kliknij Wyświetl aplikację. Następnie kliknij Pełny ekranpełny ekran.

Odświeżanie i otwieranie linków w nowym oknie incognito powinno teraz działać prawidłowo.