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