2012-03-31 13 views
19

Szukam, aby móc zasadniczo zmienić porty, na których działa moja ekspresowa aplikacja.Programowo zatrzymaj i zrestartuj serwery ekspresowe (aby zmienić porty)

Próbowałem:

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

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

Zwraca tajemniczy błąd node.js. Używam węzła v0.4.11, aktualizuję teraz, aby sprawdzić, czy to naprawi.

EDIT Oto błąd:

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

Dzięki Matt

+0

'.listen' jest asynchroniczny, więc spróbuje zamknąć przed jego otwarciem. Wypróbuj 'server.listen (8080, function() {server.close();});', może to zadziała. – loganfsmyth

+1

Jaki błąd dostałeś? – Brad

+0

Asercja nie powiodła się: (! Io-> watcher_.active), funkcja Ustaw, plik ../src/node_io_watcher.cc, linia 160. – Matt

Odpowiedz

26

Problem jest, że .listen jest asynchroniczne. Dzwoniąc pod numer .close bezpośrednio po wywołaniu .listen, zamykasz go, zanim zostanie otwarty.

Spróbuj tego zamiast tego.

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

#close jest również asynchroniczny. Ma wywołanie zwrotne, które wyzwala tylko wtedy, gdy serwer zakończył rozwiązywanie wszelkich pozostawionych połączeń – rocketspacer

Powiązane problemy