gpt4 book ai didi

node.js - ExpressJS - Elastic Beanstalk 502 错误网关

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:56 24 4
gpt4 key购买 nike

我在 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,但 Node 应用程序尚未启动。

这是我修复它的方法:

  1. 在我的项目的根目录中创建一个名为 .ebextensions 的目录
  2. 在 .ebextensions 中创建一个名为 nodecommand.config 的文件
  3. 在 nodecommand.config 中添加以下 yaml:
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

关于node.js - ExpressJS - Elastic Beanstalk 502 错误网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com