【问题标题】:Express App on Azure cannot load static file, status 500Azure 上的 Express App 无法加载静态文件,状态 500
【发布时间】:2019-02-20 00:02:05
【问题描述】:

我正在 Azure 上部署 Node.js Express 应用程序,但该应用程序无法加载静态 css/js 文件。静态文件在我的 localhost:3000 下工作正常。但是在 Azure 上运行时,它会抛出 Internal Server Error 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')));


【问题讨论】:

    标签: node.js azure express azure-web-app-service


    【解决方案1】:

    根据我的经验,我认为不正确的部署会导致 Azure 上 Node.js 中的内部服务器错误的错误代码 500。因此,要修复它,请首先检查路径site/wwwroot 中的web.config 文件的内容。还有一个来自 Kudu wiki 页面 Using a custom web.config for Node apps 的标准示例 web.config,您可以参考。

    如果您的 Node 应用部署成功,您将看到一个不存在的静态文件的 404 Not Found 错误代码,而不是您所说的 500

    但是,变量 __dirname 在本地和 Azure 之间存在差异。在本地,__dirname 变量的值始终是您启动节点进程的完整路径名,例如 print __dirname 将返回 D:\home 如果在 CMD 中运行 node D:\home。但是在 Azure 上,如果您尝试在 Kudu 控制台中运行命令 node -e "const path = require('path'); console.log(__dirname);",您将在任何路径为 . 的路径中看到 __dirname 值,如下图所示。

    因此,path.join(__dirname, 'public') 的值始终为public,与 IIS 启动的节点的当前路径无关。所以要修复它,请在path.join方法中使用D:\home\site\wwwroot之类的绝对路径而不是__dirname变量,或者在express.static方法中直接使用D:\home\site\wwwroot\public

    【讨论】:

      【解决方案2】:

      解决了!

      我检查了 Azure 诊断工具中的详细错误日志文件。它显示 500 错误是由于以下原因造成的:

      HTTP 错误 500.0 - 内部服务器错误 D:\Python34\python.exe - FastCGI 进程意外退出

      事实上,在我的 Azure App Service 应用程序设置中,我打开了 python 3.4 版本,它以某种方式尝试使用 python 处理我的静态请求。我只是在我的应用程序设置中关闭了 python 版本,现在我可以成功加载我的静态文件了。

      【讨论】:

      • 您好,您可以标记您的答案以帮助遇到类似问题的其他人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2014-07-12
      • 2018-03-19
      • 2017-05-18
      • 1970-01-01
      相关资源
      最近更新 更多