【问题标题】:Deploying express node.js project to azure 500 server error将 express node.js 项目部署到 azure 500 服务器错误
【发布时间】:2019-05-05 13:10:50
【问题描述】:

似乎已经尝试了所有可用的解决方案,尽管有人声称 Azure 已经在内部解决了这个问题,但我无法让它工作,生产部署每次都会给我一个 500 错误。在本地部署工作。这是我的 app.js,它基本上是 express 4.12.2 的“开箱即用”

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.set('port', process.env.PORT || 1337);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;

app.listen(app.get('port'), function(){
           console.log('Express server listening on port ' + app.get('port'));
           });

【问题讨论】:

  • 查看您的代码无助于诊断您的部署问题...发布您的部署步骤和错误
  • 我只是将本地 git repo 推送到 azure,就像 Azure 文档中的演示一样...azure.microsoft.com/en-gb/documentation/articles/…
  • 唯一不同的是我使用的是 express
  • 并且您的文件在 git repo 根目录中被命名为 server.js,如这些文档中所述?
  • 有运气吗?我也面临同样的问题...

标签: node.js azure express


【解决方案1】:

我怀疑您可能会在日志中收到此错误。

Error: ENOENT, open 'D:\home\site\wwwroot\bin\views\layouts\main.handlebars' at Error (native)

Enable the error logs

记下视图文件夹的路径。

您可以尝试删除 www 文件。请查看Express docs 中的最后几段了解如何操作。

我还发现,如果您有图像和字体等资源,则需要添加 app.use(express.static('public')); - 否则它会静默失败。

【讨论】:

    【解决方案2】:

    确保您的入口点位于根文件夹中。

    在我的例子中,我的入口点是“./bin/www”,我必须手动将此文件移动到根目录并更新 Web.config 中的 and 部分才能使其正常工作。

    进行这些更改后再次部署。

    【讨论】:

      【解决方案3】:

      以下问题提供了几种解决方案

      Azure NodeJS Error: ENOENT, open 'D:\home\site\wwwroot\bin\views\'

      现在我只是在 app.js 顶部附近使用了以下内容 process.chdir(__dirname);

      【讨论】:

        【解决方案4】:

        我知道处理这种情况非常棘手。

        1. 尝试了解/google 哪些版本的 nodejs azure 门户支持。它仅支持特定版本。记下这些版本并尝试使用您需要的任何版本,或尝试仅使用该列表中的最新版本。
        2. 在 azure 门户中 -> 转到您的应用服务 -> 您应该在 appservice 详细信息中看到控制台 -> 键入 node -v。
        3. 这应该给你节点版本可能像 0.10.4 左右。这可能是主要的罪魁祸首。
        4. 转到应用服务配置下的应用设置。在那里添加节点版本,例如 WEBSITE_NODE_DEFAULT_VERSION 作为您的节点版本,例如:8.9.4
        5. 转到您的 package.json 并添加与您在 azure 门户应用设置中使用的相同的节点版本。例如:“引擎”:{ “节点”:“8.9.4” }
        6. 重启应用服务->检查控制台->节点-v。 如果这显示相同的版本,则部署应用程序,它应该可以正常工作。

        如何检查真正的错误而不是 500

        1. 在 Azure 门户中为您的应用服务启用诊断日志
        2. 选择日志流
        3. 刷新您的网站。现在您应该会在日志流中看到真正的错误消息。

        祝你好运。

        【讨论】:

          猜你喜欢
          • 2014-01-26
          • 1970-01-01
          • 1970-01-01
          • 2017-10-28
          • 2021-12-02
          • 1970-01-01
          • 2023-03-29
          • 2019-07-20
          • 1970-01-01
          相关资源
          最近更新 更多