Vue 3 на сервере разработки при переходе по адресу выдаёт ошибку cannot get /адрес
Имею вот такую ссылку:
<li
class="header-list__item"
>
<a href="/roadmap">
<div class="header-nav-link__img roadmap-header-btn"></div>
<p class="header-nav-link__text">
Дорога<br>прогресса
</p>
</a>
</li>
Вот router.js:
import { createRouter, createWebHistory } from 'vue-router';
// Компоненты
import MainLayout from '@/pages/MainLayout';
import Roadmap from '@/components/roadmap/Roadmap';
import MainPage from '@/pages/MainPage';
export default createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
name: 'main',
component: MainLayout,
children: [
{
path: '/',
name: 'main',
component: MainPage
},
{
path: '/roadmap',
name: 'roadmap',
component: Roadmap
}
]
}
]
})
Вчера всё работало нормально, но когда сегодня я ничего не меняя развернул сервер с помощью:
npm run serve
То при переходе по ссылке получил белую страницу вот с такой ошибкой:
Cannot GET /roadmap
В то время как в production версии всё работает отлично:
Помогите пожалуйста!!! Не знаю что делать, повторно скажу, что вчера всё работало отлично, а сегодня я ничего не менял. А, точно, проект генерировал с помощью vue-cli
Ответы (1 шт):
Почему вы используйте тег <a>, а не <router-link>?
Как я понял, вполне возможно что у вас сервер настроен как то не правильно. На проде у вас стоит какой-нибудь nginx, который все запросы проксирует на /. Скорее всего, именно по этому пути у вас лежит приложение. А далее уже vue-router берет на себя маршрутизацию. Если вы используете тег <a>, то при переходе по ссылкам, у вас страница перезагружается. На проде все норм, потому что там сервер настроен правильно, а на локальной машине по пути /roadmap у вас ничего нет.
Во-первых, вам нужно на локальной машине перед vue поставить какой-нибудь сервер, который все запросы будет перенаправлять на корень /. Или покопайтесь в настройках vue-cli, на сколько я знаю, с ним уже какойто сервер в коробке идет.
Во-вторых, вместо <a> используйте <router-link>. Так vue-router сможет перехватить нажатие на ссылку, и у вас сайт не будет перезагружаться, при клике на нее.
Тут подробнее про <router-link> https://v3.router.vuejs.org/ru/api/#router-link
