11

Express 4 アプリでnode-inspectorを実行しようとしています-- これを Vagrant ボックスで実行していますが、問題なくブラウザーでページを表示できます (ホスト マシンで使用できる vagrant マシンのポートがあります) )。

npm startまたはを使用してアプリケーションnode --debug bin/wwwを起動し、 node-debugger を起動しますbin/www。ブラウザーにインスペクターをロードすると、最初の行で最初のブレークポイントにヒットしますが、デバッグするページでブレークポイントをトリガーするアクションを実行すると、EADDRINUSE(別名ポートが使用されている) エラーが発生します。何がこれを引き起こしているのか少し困惑していますが、Express 4 ではなく Express 3 で動作するコマンドを使用している可能性が非常に高いです。ホストマシンのブラウザーですが、vagrant ボックスでインスペクターを実行していますか?

4

2 に答える 2

24

更新:これがあなたの問題だと確信しています:

node --debug bin/www を実行し、node-debugger bin/www を起動します。

それらの両方をしないでください。それはどちらかです。それらは同じことを行う2つの方法です。node-inspector を使用しているかどうかに関係なく、よりシンプルでノード自体で動作するため、前者の方法を好みます。

要約する:

  • node-debug bin/www同じプロセスでアプリをデバッグモードとノードインスペクターの両方で起動します
  • node --debug bin/wwwアプリをデバッグ モードで起動します。これは、別のプロセスとして実行する別のターミナル ウィンドウと組み合わせる必要がありますnode-inspector。このアプローチをお勧めしますが、どちらでも機能するはずです。

これのトラブルシューティングを開始するための私の提案は次のとおりです。コマンドの最も単純な形式を使用して、すべてを実行してみてください。

  • vagrant ホスト内の 1 つの ssh セッション ターミナルで、アプリをフォアグラウンドで直接起動します。node --debug ./bin/www
    • v8 はポート 5858 にバインドしようとします。「debugger listen on port 5858」というメッセージが表示され、「Failed to open socket on port 5858, w​​aiting 1000 ms before retrying」というメッセージは表示されません。
    • 「ポート 5858 でソケットを開くことができませんでした」というメッセージが表示された場合は、別のプロセスが既にリッスンしています。実行sudo netstat -ntlpして、それがどのプロセスであるかを確認し、それが何であるか、なぜ実行されているかを理解し、それを強制終了してポートを解放しますkill <pid-you-got-from-netstat>
  • vagrant ホスト内の別の ssh セッション ターミナルで、node-inspector Web サーバーnode-inspectorをフォアグラウンドで起動します。通常の出力が表示され、エラーがないことを確認してください。
  • おそらく次のような正しいURLに接続しhttp://localhost:8080/debug?port=5858ます(vagrant IP /ポートが異なる場合を除く)
  • そこにたどり着いて、途中で表示される予期しないエラーを解決すれば、実際にはうまくいくはずですが、そうでない場合は、表示されるこのEADDRINUSEエラーに関する正確な詳細を投稿してください。それはあなたのアプリ自体の例外ですか?もしそうなら、あなたのvagrantホストのどこかですでに実行されている、あなたのアプリケーションのWebサーバーポートにバインドされている、あなたの高速アプリの古いインスタンスがありますか?
于 2014-05-22T05:45:53.493 に答える
0

スーパーバイザーでも同じプロセスが機能します。

于 2015-09-04T02:52:36.180 に答える