8

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;
Martijn Pieters
  • 889,049
  • 245
  • 3,507
  • 2,997
William
  • 3,608
  • 11
  • 41
  • 85
  • 1
    `code 0` is not an error. It indicates the program finished successfully or that `process.exit()` was called without an argument. You'll need to post the code for `app.js` to get more help. This isn't enough to do more. – Matthew Bakaitis Jun 18 '14 at 17:51
  • You might just need to run `supervisor app.js`, looks like you may have forgotten the file ext? – jiminikiz Jun 18 '14 at 18:50
  • @Matt Bakaitis I added the app.js file. Its nothing but a basic Express.js instance. – William Jun 19 '14 at 01:00
  • There is no app.listen in there. The server never actually serves. – Matthew Bakaitis Jun 19 '14 at 01:22
  • The `module.exports` at the end suggests that this is being called by something else. Is this part of a framework or a tutorial? I'm finding other identical code on other StackOverflow questions but I can't find the original source. – Matthew Bakaitis Jun 19 '14 at 02:11

3 Answers3

19

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.

Matthew Bakaitis
  • 10,230
  • 6
  • 37
  • 46
  • I 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. – William Jun 19 '14 at 04:49
  • updated my answer. if you aren't clear about why `supervisor app` is returning an `exit 0` or why calling `supervisor ./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. – Matthew Bakaitis Jun 19 '14 at 12:29
  • Why does clicking on the www file run node? – Ian Warburton Jul 31 '14 at 13:08
  • Clicking on the file launching a program (not just node) depends upon your system setup. It's not a universal behavior. – Matthew Bakaitis Jul 31 '14 at 13:18
0

Default way to run your app, when you use express-generator, is to paste

DEBUG={appName}:* npm start

{appName} - is probably your folder name (like for me), anyway, you can find it in your package.json -> "name";

-2

Thanks for the best answer, finally this works for me:

"main": "./bin/www",
"scripts": {
   "start": "node ./bin/www"
}
Liber
  • 360
  • 2
  • 12