Приложение Express в Azure не может загрузить статический файл, статус 500 - PullRequest
0 голосов
/ 14 февраля 2019

Я развернул приложение Node.js Express в Azure, и приложение не смогло загрузить статический файл css / js.Статический файл отлично работает под моим localhost: 3000.Но при работе в Azure выдается внутренняя ошибка сервера 500.

Ошибка в моем chrome выглядит следующим образом:

GET https: ///resources/css/style.css net ::ERR_ABORTED 500 (внутренняя ошибка сервера).Дерево каталогов для этого css-файла: / public / resources / css

Я предполагаю, что мой статический путь к файлу правильный, иначе я бы увидел ошибку 404 вместо 500


app.use(express.static(path.join(__dirname, 'public')));


Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Решено!

Я проверил файлы журналов подробных ошибок из инструмента диагностики Azure.И это показывало, что ошибка 500 была вызвана следующим:

Ошибка HTTP 500.0 - Внутренняя ошибка сервера D: \ Python34 \ python.exe - Процесс FastCGI неожиданно завершил работу

Фактически, вВ настройках приложения службы приложений Azure я включаю версию Python 3.4, которая каким-то образом Azure пытается обработать мой статический запрос с помощью Python.Я просто отключаю версию python в настройках приложения и теперь могу успешно загрузить статический файл.

0 голосов
/ 18 февраля 2019

Судя по моему опыту, неправильное развертывание вызывает код ошибки 500 Internal Server Error в Node.js в Azure.Чтобы это исправить, сначала проверьте содержимое файла web.config в пути site/wwwroot.И есть стандартный пример web.config со страницы вики Kudu Using a custom web.config for Node apps, к которому вы можете обратиться.

Если ваше приложение Node успешно развернуто, вы увидите код ошибки 404 Not Foundдля несуществующего статического файла вместо 500, как вы сказали.

Однако для переменной __dirname существует разница между local и Azure.На локальном компьютере значение переменной __dirname всегда является полным именем пути, где вы запускаете процесс узла, например, print __dirname вернет D:\home, если запустить node в CMD при D:\home.Но в Azure вы увидите значение __dirname в любом пути, который будет ., если вы попытаетесь запустить команду node -e "const path = require('path'); console.log(__dirname);" в консоли Kudu, как показано на рисунке ниже.

enter image description here

Следовательно, значение path.join(__dirname, 'public') всегда равно public, которое не связано с текущим путем узла, запущенного IIS.Поэтому, чтобы исправить это, используйте абсолютный путь, например D:\home\site\wwwroot вместо __dirname в методе path.join или просто используйте D:\home\site\wwwroot\public в express.static методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...