我在Amazon Elastic Beanstalk上运行Express.js应用程序,并且成功创建了我的环境,但是当我通过Amazon已创建的URL进入环境时,收到502 Bad Gateway nginx/1.6.2错误。虽然我已经阅读了StackOverflow上的其他资源,这建议我将主文件从server.js重命名为main.js并将port设置在bin/www文件夹中,但我觉得这不是我的应用程序的解决方案。我运行了node server.js,这是我相信的命令
Elastic Beanstalk运行,并且不起作用,(错误消息):

node server.js
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: failed to connect to [undefined:27017]

因为我在.env文件中设置了ENV变量,所以运行服务器的唯一方法是使用领类。这使我认为502错误是Elastic Beanstalk无法理解变量并导致服务器故障的结果。任何人都可以确认我走在正确的路径上吗,或者真的是因为我的主文件名为server.js而不是bin/www文件夹中的这个问题?

这是我的server.js文件中的代码:
//Load express
var express = require('express');
var app = express();
var router = express.Router(); // get an instance of the router
var bodyParser = require('body-parser'); // configure app to use bodyParser()
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var aws = require('aws-sdk');

app.use(bodyParser.urlencoded({ extended: true})); // get data from a POST method
app.use(bodyParser.json());
app.use(morgan('dev'));
app.use(cookieParser());


var port = process.env.PORT || 8080; // set the port

var DB_CONFIG = process.env.DB_CONFIGURATION;
var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY;
var S3_BUCKET = process.env.S3_BUCKET;

var blogDB = require('./config/blogDB.js');
mongoose.connect(blogDB.url);




require('./config/passport.js')(passport);


app.set('view engine', 'ejs'); // set ejs as the view engine

app.use(express.static(__dirname + '/public')); // set the public directory

app.use(session({ secret: 'thisisatest' }));
app.use(passport.initialize());
app.use(passport.session());

app.use(flash());


var routes = require('./app/routes');

app.use(routes); // use routes.js


app.listen(port);
console.log('magic is happening on port' + port);

和我的包文件:
{
  "name": "test",
  "main": "server.js",
  "dependencies": {
    "body-parser": "1.6.5",
    "ejs": "^1.0.0",
    "express": "^4.6.1",
    "express-paginate": "0.0.2",
    "mongoose": "~3.6.15",
    "mongoose-paginate": "^3.1.0",
    "serve-favicon": "*",
    "passport" : "~0.1.17",
    "passport-local" : "~0.1.6",
    "connect-flash" : "~0.1.1",
    "bcrypt-nodejs" : "latest",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.0",
    "method-override": "~1.0.0",
    "express-session": "~1.0.0",
    "aws-sdk": "*"
  }
}

最佳答案

今晚我遇到了同样的问题。事实证明,即使门户网站声称默认情况下将运行npm start,也未启动该节点应用程序。

这是我为解决此问题所做的工作:

  • 在我的项目
  • 的根目录中创建一个名为.ebextensions的目录。
  • 在.ebextensions内部,创建一个名为nodecommand.config的文件
  • 在nodecommand.config内部添加以下yaml:



  • 完整说明可在此处获取:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_express.html

    09-30 13:42
    查看更多