2012-03-31 2 views
19

Я ищу, чтобы иметь возможность в основном изменять порты, на которых работает мое экспресс-приложение.Программно останавливать и перезапускать экспресс-серверы (для изменения портов)

Я пробовал:

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

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

Это возвращает зашифрованное Node.js ошибку. Я запускаю узел v0.4.11, теперь я обновляюсь, чтобы проверить, исправляет ли он это.

EDIT Вот ошибка:

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

Спасибо, Matt

+0

'.listen' является асинхронным, поэтому попытается закрыть его до того, как он будет открыт. Попробуйте 'server.listen (8080, function() {server.close();});', возможно, это сработает. – loganfsmyth

+1

Какая ошибка вы получаете? – Brad

+0

Утверждение не выполнено: (! Io-> watcher_.active), функция Set, file ../src/node_io_watcher.cc, строка 160. – Matt

ответ

26

Вопрос заключается в том, что .listen является асинхронным. Вызвав .close сразу же после звонка .listen, вы закрываете его до его открытия.

Попробуйте это вместо этого.

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

#close также асинхронный. Он имеет обратный вызов, который запускается только тогда, когда сервер завершил работу с любыми оставшимися соединениями – rocketspacer