Прямые ссылки на маршрутизатор React не работают в Azure Web App Linux

Я разработал PoC о PWA (Progressive Web Apps) с использованием ReactJs, чтобы показать, как использовать камеру, геолокацию, микрофон, датчики освещенности и т. Д. Из API браузера.

Я создал маршрут для каждой функции в этом веб-приложении, и в localhost все работает нормально. Но когда я развертываю версию npm build своего приложения для реагирования на службу Azure Wep App Linux, она не работает должным образом. Я могу получить доступ к главной странице (index.html), и оттуда я могу перейти на любую другую страницу, но когда я пытаюсь получить доступ к любому маршруту напрямую с его URL-адреса, я получаю ошибку 404. За исключением индексной страницы, все URL-адреса не работают при обновлении или записи вручную.

Пример:
https://pwa.mypoc.dev/ - Прекрасно работает
https://pwa.mypoc.dev/lights - Не работать

Я использовал эту команду в лазурном «Настройки»> «Общие настройки»> «Команда запуска»:

pm2 serve /home/site/wwwroot/build --no-daemon

Я нашел связанный с этим вопрос, но ответ мне не помог, так как я не использую web.config, потому что это компьютер с Linux, на котором работает Node 10 LTS: Приложение React не запускается в службе приложений Azure


person Lutti Coelho    schedule 23.04.2020    source источник


Ответы (1)


После небольшого дополнительного исследования я нашел проблему. Поскольку веб-приложения Linux Azure используют pm2 для обслуживания узлового приложения, я нашел ответ в официальной документации.

PM2 - это диспетчер процессов демона, который поможет вам управлять вашим приложением и поддерживать его в сети. Начать работу с PM2 несложно, он предлагается в виде простого и интуитивно понятного интерфейса командной строки, устанавливаемого через NPM.

https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/#serving-spa-redirect-all-to-indexhtml

Просто нужно добавить параметр --spa в команду запуска в Azure Web Apps Linux Общие настройки:

pm2 serve /home/site/wwwroot/build --no-daemon --spa

Использование опции --spa pm2 автоматически перенаправит все запросы в index.html, а затем ответный маршрутизатор сделает свое волшебство.

person Lutti Coelho    schedule 23.04.2020
comment
есть способ сделать это без PM2? кто-нибудь знает, уважает ли веб-приложение linux htaccess или что-то в этом роде? - person Qiong Wu; 02.03.2021
comment
Точно не знаю. Но я считаю, что это невозможно, поскольку веб-приложение linux является решением PaaS. Вы можете попробовать использовать контейнер веб-приложения, чтобы попробовать его без PM2. - person Lutti Coelho; 03.03.2021
comment
Я столкнулся с той же проблемой для следующего js-приложения в веб-приложении azure linux, и добавление ny выше, поскольку команда запуска по-прежнему имеет ту же проблему - person Arun Rana; 16.04.2021
comment
Вы изменили /home/site/wwwroot/build путь к вашему основному файлу? - person Lutti Coelho; 18.04.2021