2014-06-18 14 views
7

Quando si installa un'applicazione impalcatura espresso.js nodo supervisore "nodo programma applicazione terminato con il codice di errore 0"

express 

quindi eseguire il NPM installazione

npm install 

e quindi eseguire supervisore

supervisor app 

Ottengo

Starting child process with 'node app' 
Program node app exited with code 0 

Il file app.js è un'istanza di default predefinita di base.

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; 
+1

'codice 0' non è un errore. Indica che il programma è stato completato con successo o che 'process.exit()' è stato chiamato senza argomento. Dovrai pubblicare il codice per 'app.js' per ottenere ulteriore assistenza. Questo non è abbastanza per fare di più. –

+0

Potrebbe essere necessario eseguire 'supervisor app.js', sembra che tu abbia dimenticato il file ext? – jiminikiz

+0

@Matt Bakaitis Ho aggiunto il file app.js. Non è altro che un'istanza Express.js di base. – William

risposta

18

L'applicazione che il generatore crea chiamate ./bin/www che include app.js e poi si mette in ascolto per il traffico.

app.jsnon esegue questa operazione.

Penso che sia importante capire.

app.listen è non essere chiamato in app.js ma è chiamato in ./bin/www ... e questo è il motivo per cui si ottiene il risultato exit 0. Quando si chiama app.js e non ./bin/www viene eseguito attraverso il file, ma poiché non è un comando per ascoltare il traffico, il programma termina normalmente ... vale a dire. senza aver fatto nulla.

Detto questo, ci sono due opzioni ..

Opzione 1

Se si dispone di un file ./bin/www, è possibile eseguire supervisor ./bin/www per ottenere le cose iniziate.

Opzione 2

Se non si dispone del file ./bin/www per qualsiasi motivo, è possibile modificare il file app per assomigliare a questo.

Nella tua scheda dell'app, sostituire

module.exports = app; 

con questo

app.set('port', process.env.PORT || 3000); 

var server = app.listen(app.get('port'), function() { 
    debug('Express server listening on port ' + server.address().port); 
}); 

Nota importante

Mentre quella modifica verrà avviare l'ascolto app e non sarà possibile ottenere un exit 0 più, non posso garantire che l'app non si bloccherà con qualche altro errore se altri file e directori mancano Ad esempio, se la directory routes non è presente, le dichiarazioni che richiedono routes/index e routes/users non riusciranno e si verificheranno altre cose brutte.

+0

Stavo usando una versione precedente di node/express e sono appena stato aggiornato stasera e non sono utilizzato per la struttura dei comandi più recente. Non ho usato npm start perché non si aggiorna mentre scrivi codice, ecco perché sto cercando di usare supervisor. Utilizzando il comando "start supervisor app" funziona su un'app vecchia che ho creato ma non con il codice in questo post. – William

+0

ha aggiornato la mia risposta. se non sei chiaro sul perché 'supervisor app' sta restituendo un' exit 0' o perché chiamare 'supervisor./bin/www' è un'alternativa, controlla alcuni tutorial di express.js e visita la pagina github del progetto. la pagina github ha molti buoni progetti di esempio che possono essere davvero utili quando si inizia. –

+0

Perché facendo clic sul nodo di esecuzione del file www? –

-2

Grazie per la risposta migliore, finalmente questo funziona per me:

"main": "./bin/www", 
"scripts": { 
    "start": "node ./bin/www" 
} 
0

modo predefinito per eseguire la vostra applicazione, quando si utilizza Express-generatore, è quello di incollare

DEBUG={appName}:* npm start

{appName} - è probabilmente il nome della cartella (come per me), comunque, è possibile trovarlo nel pacchetto .json -> "nome";