Программно остановить и перезапустить экспресс-серверы (чтобы изменить порты) - PullRequest
24 голосов
/ 01 апреля 2012

Я ищу возможности изменить порты, на которых работает мое экспресс-приложение.

Я пробовал:

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

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

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

РЕДАКТИРОВАТЬ Вот ошибка:

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

Спасибо, Matt

Ответы [ 2 ]

34 голосов
/ 01 апреля 2012

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

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

server.listen(8080, function() {
  server.close();
});
2 голосов
/ 25 июля 2018

Благодаря @ aymericbeaumet , следующий фрагмент работает с Express 4:

var app = express();

var server = app.listen(8080, function() {
  console.log('Listening :)');
  server.close(function() { console.log('Doh :('); });
});
...