我正在Amazon Elastic Beanstalk上运行Express.js应用程序,并且我的环境已成功创build,但是当我通过Amazon创build的URL访问我的环境时,收到502 Bad Gateway nginx/1.6.2
错误。 虽然我已经阅读了StackOverflow的其他资源,build议我将我的主文件从server.js
重命名为main.js
,并将该port
设置为bin/www
文件夹,但我觉得这不是我的应用程序的解决scheme。 我运行node server.js
,这是我相信Elastic Beanstalk运行的命令,它不起作用,(错误消息):
node server.js events.js:72 throw er; // Unhandled 'error' event ^ Error: failed to connect to [undefined:27017]
因为我在.env
文件中设置了ENVvariables,所以唯一可以运行我的服务器的方法是使用工头。 这使我认为502错误是Elastic Beanstalk不能理解variables,从而导致服务器失败的结果。 任何人都可以确认,我在正确的path或这个问题真的,因为我的主文件被命名为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
,节点应用程序还没有启动。
这是我做了什么来解决它:
option_settings: - namespace: aws:elasticbeanstalk:container:nodejs option_name: NodeCommand value: "npm start"
完整的说明可以在这里找到: https : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_express.html