Приложение Angular 6 ломается при перезагрузке после производственной сборки

У меня есть приложение, в котором я сохранил ту папку dist, которую мы получаем после успешной полной производственной сборки на моем сервере. Все работает нормально, все модули и компоненты работают отлично. Пока я не перезагружаю окно браузера вручную, возникают следующие ошибки. Также я создал проект, используя base-href - / dist /

        Object not found!
        The requested URL was not found on this server. If you entered the URL 
        manually please check your spelling and try again.

        If you think this is a server error, please contact the webmaster.
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
0
7 511
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы пробовали создать сайт без --base-href или с --base-href = ""?

без --base-href выдает ошибку полифилла main.js и т. д.

Jignesh Mistry 09.08.2018 08:08
Ответ принят как подходящий

Вы должны настроить свой сервер для отправки index.html (обычно) для любого URL-адреса, который не существует.

Что происходит, когда вы переходите на другой маршрут в приложении, именно JS обрабатывает вашу маршрутизацию. Но как только вы нажмете «Обновить», это браузер, который просит ваш сервер обработать этот запрос, и, поскольку маршруты не обрабатываются на стороне сервера, он сообщает об указанной ошибке.

Следовательно, вам необходимо доставить файл index независимо от того, какой маршрут запрашивает браузер.

Что ж, если мы говорим о попадании в api из внешнего интерфейса, тогда вы можете использовать концепцию под названием обратный прокси, если у вас есть какой-либо статический сервер между ними, или обрабатывать маршрут /api перед любым маршрутом * на стороне сервера, чтобы ваш запрос был обработан. сервером иначе.

Взгляните на этот гид, чтобы настроить свой сервер.


Однако есть и умный способ справиться с маршрутизацией. Используя useHash: true. Пожалуйста, посмотрите руководство здесь.

RouterModule.forRoot(routes, { useHash: true })

Хорошо, позволь мне попробовать это и посмотреть

Jignesh Mistry 09.08.2018 08:10

Какой из них вы использовали? Настройка сервера или useHash? Рекомендуется сконфигурировать ваш сервер, а не использовать HashLocationStrategy.

Ankit Sharma 09.08.2018 08:15

Взгляните на angular.io/guide/deployment#server-configuration, если вы не хотите использовать HashLocationStrategy

Ash 09.08.2018 08:15

я использовал useHash: true

Jignesh Mistry 09.08.2018 08:17

Позвольте мне прояснить - вы делаете следующее:

  1. посетите yourdomain.com/dist - приложения загружаются нормально
  2. вы делаете некоторые переходы, например. yourdomain.com/dist/somemodule/somethingelse
  3. Вы попали на f5
  4. Возвращается код ошибки 404.

Если я прав, вам нужно настроить правильную перезапись URL-адресов на своем веб-сервере. В основном то, что он делает, возвращает index.html независимо от того, какой URL-адрес запрашивается, если, например,. путь начинается с / dist /

Документация Angular явно объясняет, что нужно сделать, и даже предоставляет пример конфигурации для некоторых веб-серверов.

Я удивлен, что ваше приложение было создано для preducton без того, чтобы вы или команда интеграции знали эти (базовые !!!) концепции.

https://angular.io/guide/deployment#routed-apps-must-fallback-to-indexhtml

Я проверил примеры конфигурации Fallback, но в списке нет ни одного для Nodejs / Express angular.io/guide/deployment#fallback-configuration-examples. Можете ли вы указать на действительный пример.

Prateek 14.05.2019 12:02

Как упомянул @Antonoiosss в своем ответе выше, это связано с проблемами переписывания URL-адресов на вашем производственном сервере. Однако резервный вариант для Apache не будет работать для меня (даже с базовыми настройками, которые у меня есть на моем веб-сервере), указанными в URL-адресе выше.

Следующий пример .htaccess работал у меня,

 <IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    #RewriteCond %{HTTPS} !on
    #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # Don't rewrite files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    # Rewrite everything else to index.html
    # to allow html5 state links
    RewriteRule ^ index.html [L]   
</IfModule>

Вышеупомянутое работало с Угловые 6, 7 и 8. Я закомментировал две строки, которые отвечают за маршрутизацию HTTPS. Однако это, скорее всего, будет включено, когда ваше приложение попадет в реальную производственную среду.

Надеюсь, это кому-то поможет.

Ваше здоровье.!

Другие вопросы по теме