Vue 3 на сервере разработки при переходе по адресу выдаёт ошибку cannot get /адрес

Рейтинг: 0Ответов: 1Опубликовано: 21.04.2023

Имею вот такую ссылку:

  <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

Ответы

▲ 2Принят

Почему вы используйте тег <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