2012-03-31 13 views
19

私のエクスプレスアプリケーションが実行されているポートを基本的に変更できるようにしたいと考えています。エクスプローラをプログラム的に停止して再起動する(ポートを変更する)

私が試してみた:

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. 

おかげで、 マット

+0

'.listen'は非同期なので、オープンする前に閉じようとします。 'server.listen(8080、function(){server.close();});'を試してみてください。 – loganfsmyth

+1

どのようなエラーが表示されますか? – Brad

+0

アサーションに失敗しました:(!io-> watcher_.active)、関数Set、ファイル../src/node_io_watcher.cc、160行 – Matt

答えて

26

問題が.listenが非同期であるということである。

EDITはここでエラーです。 .listenを呼び出した直後に.closeを呼び出すと、それを開く前に閉じています。

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

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

#closeも非同期です。それはコールバックを持っています。これは、サーバーが残りの接続を処理し終わったときにのみトリガーされます – rocketspacer

関連する問題