node.js - Nodejs/express api 在弹性 beantalk 上的 502 bad gateway 处失败
问题描述
我尝试在 Elastic Beanstalk 上启动 nodejs/express api。
当我在本地运行 api 时,它运行良好。
当我访问弹性 beanstalk 给出的 URL 时,我到达了 502 bad gateway。
这是我收到的错误日志:
Error: Cannot find module '/var/app/current/main.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! backend@1.0.0 start: `node main.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the backend@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
> backend@1.0.0 start /var/app/current
> node main.js
internal/modules/cjs/loader.js:638
throw err;
这是我的 main.js:
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const cors = require('cors')
const mongoose = require('mongoose')
const passport = require("passport")
// const teamRoutes = express.Router()
const PORT = 4000
//app imports
const { teamRouter } = require('./routers')
const { playerRouter } = require('./routers')
const { reportRouter } = require('./routers')
const { likeRouter } = require('./routers')
const { leagueRouter } = require('./routers')
const { filterRouter } = require('./routers')
const { commentRouter } = require('./routers')
const { adminUserRouter } = require('./routers')
const { tokenRouter } = require('./routers')
let Team = require('./models/Team')
app.use(cors())
app.use(bodyParser.json())
mongoose.connect('mymongodb', { useNewUrlParser: true})
const connection = mongoose.connection
connection.once('open', function(){
console.log('MongoDB database connection established!')
})
// Passport middleware
app.use(passport.initialize());
// Passport config
require("./config/passport")(passport);
app.use('/teams', teamRouter)
app.use('/players', playerRouter)
app.use('/reports', reportRouter)
app.use('/likes', likeRouter)
app.use('/leagues', leagueRouter)
app.use('/filters', filterRouter)
app.use('/comments', commentRouter)
app.use('/api/users', adminUserRouter)
app.use('/tokens', tokenRouter)
app.listen(PORT, function() {
console.log('Server is running on Port: ' + PORT)
})
这是我的 package.json:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "node main.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.19.0",
"bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"concurrently": "^4.1.1",
"cors": "^2.8.5",
"expo-server-sdk": "^3.3.0",
"express": "^4.17.1",
"grunt": "^1.0.4",
"is-empty": "^1.2.0",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.6.4",
"mongoose-deep-populate": "^3.1.1",
"nodemailer": "^6.3.0",
"passport": "^0.4.0",
"passport-jwt": "^4.0.0",
"validator": "^11.1.0"
}
}
我的 main.js 以前叫 server.js,但我根据这篇文章的建议更改了它: 502 Bad Gateway Deploying Express Generator Template on Elastic Beanstalk
编辑:这是我的文件路径:
编辑:这是我的 .elasticbeanstalk config.yml 文件:
branch-defaults:
default:
environment: news-arg-backend
group_suffix: null
global:
application_name: news-arg-backend
branch: null
default_ec2_keyname: null
default_platform: Node.js
default_region: us-west-2
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: eb-cli
repository: null
sc: null
workspace_type: Application
在我的 .ebextensions 中,我有一个 nodecommand.config 和一个 settings.config。
这是我的 nodecommad.config:
option_settings:
- namespace: aws:elasticbeanstalk:container:nodejs
option_name: NodeCommand
value: "npm start"
这是我的settings.config:
option_settings:
aws:elasticbeanstalk:container:nodejs:staticfiles:
option_name: /static/
value: /public/
解决方案
推荐阅读
- jenkins - Jenkins 在单个图中显示多个 JMeter 报告(.jtl)
- oracle - 使用连接复制 Oracle SQL 结果
- javascript - 使用 Tornado 网络服务器运行的 Reactjs 应用程序中的路由不起作用
- exchangewebservices - 从 Outlook WebAddin 生成的访问令牌出现未经授权的错误
- javascript - 为什么选择器没有显示在反应 js 中?
- python - Tkinter 小部件不使用循环显示
- sql - SQL 触发器 - 插入记录后更新余额
- c - 数组中不同的唯一元素
- react-native - React Native Horizontal ScrollView 比它包含的图像宽得多
- azure - 如何在 cosmosDB 中进行分页?