Приложение React не запускается в службе приложений Azure

Я развернул простое приложение для реагирования на службу приложений Azure, и оно не запускается:

Как заставить приложение запускать index.html?

Приложение React не запускается в службе приложений Azure

Нет, я ничего не запускаю, разве это не то, что должна делать служба приложений, обслуживать индексные файлы по умолчанию?

Batman 17.06.2019 05:22

он должен просто запустить его, это правильно. что вы получаете вместо этого?

4c74356b41 17.06.2019 06:39

Вы используете react-router?

technogeek1995 17.06.2019 14:28

Если вы используете react-router, Linux-хост службы приложений Azure использует HTTP-сервер для прокси-сервера вашего кода в Интернете. Вам необходимо настроить правила перезаписи URL. Вы делаете это, потому что если у вас есть URL-адрес react-router (/about), когда пользователь обновляет страницу, HTTP-сервер попытается загрузить файл с именем /about, но эти файлы не существуют, что приведет к ошибке 404. Правила перезаписи URL изменят это поведение. Вместо этого он загрузит index.html, /about покажет правильную страницу из react-router. Вот связь к ответу.

technogeek1995 17.06.2019 14:50

Конечно, но приложение вообще не загружается.

Batman 17.06.2019 18:48

Как вы развертываете? мерзавец? фтп?

technogeek1995 18.06.2019 15:17

Git репозиториев Azure

Batman 18.06.2019 17:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
12
7
9 077
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Если вы развернули веб-приложение Node Linux, документ по умолчанию будет hostingstart.html расположен в /home/site/wwwroot/.

Согласно это:

When you create a Node.js app, by default, it's going to use hostingstart.html as the default document unless you configure it to look for a different file. You can use a JavaScript file to configure your default document. Create a file called index.js in the root folder of your site

Итак, перейдите в свой ssh-терминал, перейдите к /home/site/wwwroot. Создайте там index.js со следующим кодом:

var express = require('express');
var server = express();
var options = {
index: 'index.html'
};
server.use('/', express.static('/home/site/wwwroot', options));
server.listen(process.env.PORT);

ПРИМЕЧАНИЕ: Обязательно запустите npm install --save express также в этой папке, иначе служба приложения выйдет из строя при запуске.

Перезапустите, он настроит index.html в качестве документа по умолчанию для вашего приложения.

Когда я добавляю эти экспресс-скрипты в свой существующий файл index.js и запускаю локально, я получаю сообщение об ошибке. Приложение отлично работает локально, поэтому не будет ли это конфликтов?

Batman 17.06.2019 18:54

@Batman, я тестирую и получаю ошибку, затем устанавливаю экспресс-модуль, и он работает. Вы могли бы попробовать.$ npm install express

George Chen 18.06.2019 04:49

Я два дня безостановочно настраивал свои конвейеры CICD в az devops, и в итоге проблема заключалась в следующем: основной файл должен быть назван hostingstart.html. @Satheesh решение работал у меня.

ArtiomLK 20.04.2020 04:04

@GeorgeChen У меня похожая проблема, и я разместил свой вопрос на stackoverflow.com/questions/71245335/…. Не могли бы вы взглянуть на это. Я работаю последние пару дней и продолжаю получать ошибку module express not found. Спасибо

Sangeet Agarwal 24.02.2022 15:13

Так что спасибо Берку Холланду. Самый простой - создать папку сборки, работающую

npm run build

Затем вы копируете папку сборки в место назначения и добавляете файл «ecosystem.config.js».

module.exports = {
  apps: [
    {
      script: "npx serve -s"
    }
  ]
};

См. эту ссылку для получения дополнительной информации: https://burkeknowswords.com/this-is-how-to-easily-deploy-a-static-site-to-azure-96c77f0301ff

Примечание. Это работает для развертывания в экземпляре службы приложений Node Linux в Azure. При таком подходе не требуется настройка маршрутизации на стороне клиента!

Для службы приложений Windows вы можете создать файл конфигурации для настройки маршрутизации на стороне клиента.

это решение позаботилось об обеих проблемах, запустив реагирующее приложение и обработав проблемы с реагирующим маршрутизатором.

ArtiomLK 20.04.2020 09:52

Вам не нужно устанавливать экспресс и настраивать index.js, как указано в других ответах, поскольку для этого требуется изменение конфигурации, и вы не уверены, сохранит ли событие масштабирования приложения эти установки в новом экземпляре.

Простой способ - использовать pm2, поскольку он уже является частью стека. Передайте приведенную ниже команду запуска для приложения.

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

После перезапуска он должен выбрать страницы из docroot (/home/site/wwwroot)

как пройти --proxy-config proxy.config.json с pm2?

indranil9286 07.07.2021 22:13
Ответ принят как подходящий

добавьте эту команду на панель инструментов Azure > Конфигурация > Команда запуска

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

и перезапустите свой сервер. Это исправило это для меня!

как пройти --proxy-config proxy.conf.json с pm2?

indranil9286 07.07.2021 22:13

Перейдите в раздел Конфигурация Azure > Общие параметры.

  • Если ваша папка build находится в корне проекта

Команда запуска: pm2 serve /home/site/wwwroot --no-daemon --spa

  • Если ваша папка build находится внутри папки вашего клиента, просто добавьте путь

Команда запуска: pm2 serve /home/site/wwwroot/client/build --no-daemon --spa


Примечание:

Убедитесь, что вы используете сервер службы приложений Azure linux.

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

как пройти --proxy-config proxy.conf.json с pm2?

indranil9286 07.07.2021 22:13

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