2012-03-31 6 views
19

Sto cercando di poter sostanzialmente modificare le porte su cui è in esecuzione la mia app Express.Interrompere e riavviare programmaticamente i server Express (per cambiare le porte)

ho provato:

server.on('close', function() { 
    server.listen(3000); 
}); 

server.listen(8080); 
server.close(); 

Questo restituisce un errore di node.js criptico. Sto usando il nodo v0.4.11, sto aggiornando ora per vedere se lo risolve.

EDIT Ecco l'errore:

Assertion failed: (!io->watcher_.active), function Set, file ../src/node_io_watcher.cc, line 160. 

Grazie, Matt

+0

'.listen' è asincrono, quindi cercherà di chiudere prima che sia aperto. Prova 'server.listen (8080, function() {server.close();});', forse funzionerà. – loganfsmyth

+1

Che errore stai ottenendo? – Brad

+0

Asserzione fallita: (! Io-> watcher_.active), funzione Set, file ../src/node_io_watcher.cc, riga 160. – Matt

risposta

26

Il problema è che .listen è asincrona. Chiamando .close immediatamente dopo aver chiamato .listen, lo stai chiudendo prima che sia stato aperto.

Prova questo.

server.listen(8080, function() { 
    server.close(); 
}); 
+2

#close è anche asincrono. Ha un callback, che si attiva solo quando il server ha finito di occuparsi delle connessioni rimanenti – rocketspacer

Problemi correlati