web-dev-qa-db-ja.com

プログラムでエクスプレスサーバーを停止および再起動する(ポートを変更する)

基本的に、私の高速アプリが実行されているポートを変更できるようにしています。

私はもう試した:

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.

ありがとう、マット

24
Matt

問題は、.listenが非同期であることです。 .closeを呼び出した直後に.listenを呼び出すことにより、開く前に閉じます。

代わりにこれを試してください。

server.listen(8080, function() {
  server.close();
});
35
loganfsmyth

@ aymericbeaumet のおかげで、次のスニペットはExpress 4で動作します:

var app = express();

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