Как устранить скрытые ошибки 404

Martin Splitt
Martin Splitt

Одностраничные приложения могут показывать разный контент без загрузки новой страницы. Для этого используются обработчики кликов по ссылкам и History API. History API позволяет управлять историей сеансов браузера. Это позволяет обновлять URL при показе другой страницы (в одностраничных приложениях она обычно называется "представлением"). Это также гарантирует, что кнопка "Назад" в браузере будет работать правильно.

Посмотрите на одностраничное приложение в этой практической работе. Оно показывает изображения кошек или собак и предоставляет ссылки для переключения между двумя животными. Кажется, всё работает!

Как обнаружить ложную ошибку 404

К сожалению, в приложении есть небольшая ошибка. Давайте посмотрим.

  • Чтобы посмотреть сайт, нажмите View App (Посмотреть приложение), а затем – Fullscreen (Полноэкранный режим) полноэкранный режим.
  • Нажмите на ссылку Doggos. Обратите внимание, как изменился URL.
  • Перезапустите приложение.

Вы видите страницу с надписью "Cannot GET /doggos" – это ложная страница 404. Это "хитрая" ошибка, потому что веб-приложение, кажется, работает нормально, пока вы нажимаете только на ссылки внутри него. Если открыть URL в новом окне браузера или обновить страницу, он перестанет работать. Проблема в том, что сервер не знает, как отвечать на запросы по этим URL. Код JavaScript в нашем веб-приложении использует History API для навигации между ними, но сервер не знает, что с ними делать. Если сервер не знает, что делать с запрошенным URL, он возвращает код статуса HTTP 404. Этот код означает, что сервер не нашел ничего по запрошенному URL.

Поисковые системы не будут индексировать URL в этом случае, потому что пользователь нажмет на результат поиска и увидит сообщение об ошибке, а не контент, который он искал, например фотографии собак.

Устранение неполадок на сервере

В этом проекте используется сервер express.js, написанный на JavaScript. Давайте настроим сервер так, чтобы он возвращал index.html, а одностраничное приложение позаботится обо всем остальном.

  • Нажмите Создать ремикс, чтобы сделать проект редактируемым.
  • Выберите файл server.js.

Этот файл содержит код сервера. Он настраивает сервер express.js и отправляет контент index.html. Маршрут, заданный в строке 15, обслуживает веб-приложение, только когда запросы поступают на URL /. Сервер также должен обслуживать другие URL, которые мы создали. Давайте изменим это, чтобы обслуживать все URL-адреса, чтобы это также работало с дополнительными URL-адресами в будущем.

Для этого мы можем изменить код, начиная со строки 15, следующим образом:

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

/* соответствует любому URL, и сервер теперь отвечает веб-приложением в index.html для любого заданного URL.

  • Чтобы посмотреть сайт, нажмите View App (Посмотреть приложение), а затем – Fullscreen (Полноэкранный режим) полноэкранный режим.

Теперь обновление и открытие ссылок в новом окне инкогнито должно работать правильно.