For clarity, I’ll state the answer from the comments.
AWS ELB runs node app.js
BEFORE npm start
. node app.js
doesn’t give an error, but it doesn’t open any ports.
The solution is to simply rename app.js
to anything else except server.js
(ie main.js
) and reference that in bin/www by pointing to it in the /bin/www file: var app = require('../app');
to var app = require('../main');
Then it should be working correctly!
For clarity, here is what my directory looks like:
The package.json
file will get called by ELB when it launches the application server. Here it has the instruction to run the start script node bin/www
This is the bin/www
file that gets run. We see the require to ../main
and the app.set('port'...)
Then the main.js
file that runs the routing and all:
When I created the project, the main.js
file was named app.js
. The problem this caused was based on the priority ELB start sequences. ELB will launch the application and check first to see if app.js
exists — if it does exist, it runs node app.js
, otherwise it will check if package.json
exists and try to run npm start
.
When the main.js
had the name app.js
ELB tried to start the whole application by running it. However this file doesn’t open any ports.