Угловые 5 маршрутов не работают после развертывания - PullRequest
0 голосов
/ 01 июня 2018

В моем приложении Angular 5 я работал локально через ng serve, и все работает отлично.Затем я сделал ng build -prod и загрузил папку dist на свой веб-сервер.

Главная страница открывается и отображается правильно, но любой из маршрутов, по которым я пытаюсь перейти, приводит к ошибке 404.Я понятия не имею, как отладить / исправить это.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Решением для этого является использование routerLink вместо href.

Пример

 <a routerLink="/home" class="item-button">Link 1</a> <br/>
0 голосов
/ 01 июня 2018

Итак, во-первых, как обсуждалось выше, вы обязательно должны использовать директиву [routerLink] для маршрутизации внутри приложения.Использование href s в основном говорит вашему браузеру, что нужно перейти к новому маршруту, и в результате отправит запрос серверу на страницу и выдаст этот новый контент (именно поэтому вы получаете 404 этот маршрут не существует на сервере, он просто интерпретируется вашим приложением Angular).

Директива [routerLink] эффективно обновляет маршрут внутри приложения при обновлении истории навигации браузера безна самом деле получение новой страницы.Старые приложения на самом деле используют стратегию hashbang, в то время как мы обсуждаем стратегию push state ... ( Обе обсуждаются здесь, если вы хотите узнать больше )

В любом случае,как упомянутое @Ritwick.На этом этапе вы захотите перенаправить все запросы сервера на ваш index.html таким образом, если пользователь переходит на маршрут из-за пределов приложения, вы можете справиться с этим.Так же, как некоторые примеры фрагментов, вы можете сделать это перенаправление маршрутов, если вы используете NGINX:

index index.html;

location / {
  try_files $uri $uri/ /index.html;
}

или если вы используете что-то вроде Firebase, вы можете обновить свой firebase.json следующим образом:.

{
  "hosting": {
    "public": "dist", // if your app is in a subfolder of the dist, include that
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
...