Это простая ловушка, в которую можно попасть при выполнении маршрутизации на стороне клиента с помощью одностраничного приложения.
Хитрость в том, что при навигации в браузере браузер не отправка запросов на ваш сервер. При обновлении sh страницы браузер отправляет запрос на сервер . Поскольку вы создаете SPA, вся информация о том, что находится на этой странице, содержится в вашем Javascript, а этот Javascript загружен в ваш файл index.html
. Единственный файл, который существует на вашем сервере, это ваш root файл, а промежуточное ПО express.static
отображает URL-адреса на ваши файлы, поэтому для него нет файла для поиска (отсюда 404).
Что вы необходимо на стороне сервера всегда обслуживать файл index.html
независимо от того, какой файл html запрашивается .
Самое простое решение - добавить обработчик возврата last в вашей маршрутизации с использованием встроенной функции Express .sendFile()
. Простой, без нюансов способ будет выглядеть примерно так:
// ... ^^ all your other routes
router.get("*",
// The '*' means match *everything*
(req,res)=>{
res.sendFile('index.html'); // Probaby need to set some options here to start in the right directory...
}
);
Возможно, вы захотите использовать другое промежуточное ПО или добавить свои собственные функции для включения сжатия, et c, но идея будет то же самое.