Supervisor node .js "Program node app exited with code 0" error
The app that the generator creates calls ./bin/www
that includes app.js
and then starts listening for traffic.
app.js
does not do this itself.
I think this is important to understand.
app.listen
is not being called in app.js
but is called in ./bin/www
...and this is why you get the exit 0
result. When you call app.js
and not ./bin/www
it runs through the file but because is no command to listen for traffic, the program ends normally...i.e. without having done anything.
That said, you have two options..
Option 1
If you have a ./bin/www
file, you could run supervisor ./bin/www
to get things started.
Option 2
If you don't have the ./bin/www
file for whatever reason, you can edit your app file to look like this.
In your app listing, replace
module.exports = app;
with this
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
Important Note
While that edit will start the app listening and you won't get an exit 0
any more, I cannot guarantee that the app won't crash with some other error if other files and directories are missing. For example, if the routes
directory isn't present, then the declarations requiring routes/index
and routes/users
will fail and other bad things will happen.
![William](https://i.stack.imgur.com/m8i3G.gif?s=256&g=1)
William
Updated on June 23, 2022Comments
-
William about 2 years
When I install an express scaffold app
express
Then run the npm install
npm install
and then run supervisor
supervisor app
I get
Starting child process with 'node app' Program node app exited with code 0
The app.js file is a basic default express instance.
var express = require('express'); var path = require('path'); var favicon = require('static-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(favicon()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;
-
William about 10 yearsI was using a previous version of node/express and just updated tonight and I am not use to the newer command structure. I didn't use npm start because it doesn't update as you write code , that's why I am trying to use supervisor. Using the command "start supervisor app" works on an older app I made but it doesn't with the code in this post.
-
Matthew Bakaitis about 10 yearsupdated my answer. if you aren't clear about why
supervisor app
is returning anexit 0
or why callingsupervisor ./bin/www
is an alternative, check out some express.js tutorials and visit the project github page. the github page has many good example projects that can be really helpful when getting started. -
Ian Warburton almost 10 yearsWhy does clicking on the www file run node?
-
Matthew Bakaitis almost 10 yearsClicking on the file launching a program (not just node) depends upon your system setup. It's not a universal behavior.