11

我正在尝试使用 Express 4 应用程序运行节点检查器——我在 Vagrant 框中运行它,但能够在浏览器中查看页面而没有任何问题(我在 vagrant 机器上的端口可用于主机)。

我使用npm start或启动应用程序node --debug bin/www,然后启动 node-debugger bin/www。我在浏览器中加载了检查器,它在第一行命中了初始断点,但是在页面上执行任何会触发断点的调试操作都会导致EADDRINUSE(也就是端口正在使用中)错误。我对可能导致这种情况的原因感到有些困惑,但是,很可能我使用的命令可以在 Express 3 而不是 4 上运行。此外,我可能缺少一些配置来运行调试器主机的浏览器,但在 vagrant box 上运行检查器?

4

2 回答 2

24

更新:我很确定这是你的问题:

node --debug bin/www 然后启动 node-debugger bin/www。

不要同时做这两件事。这是一个或另一个。它们是做同一件事的两种方式。我更喜欢前一种方式,因为它更简单,并且无论您是否使用节点检查器都可以与节点本身一起使用。

总结一下:

  • node-debug bin/www在同一进程中以调试模式和节点检查器启动您的应用程序
  • node --debug bin/www以调试模式启动您的应用程序。这应该与node-inspector作为单独进程运行的单独终端窗口相结合。我推荐这种方法,但两者都应该有效。

这是我开始解决此问题的建议。尝试使用最简单的命令形式让一切运行:

  • 在您的 vagrant 主机内的一个 ssh 会话终端中,直接在前台启动您的应用程序node --debug ./bin/www
    • v8 将尝试绑定到端口 5858。您应该看到此消息“调试器正在侦听端口 5858”,而不是此消息“无法在端口 5858 上打开套接字,重试前等待 1000 毫秒”
    • 如果您看到“无法在端口 5858 上打开套接字”消息,则表明有另一个进程已经在侦听。运行sudo netstat -ntlp以查看它是哪个进程,了解它是什么以及它运行的原因,然后将其杀死以释放端口kill <pid-you-got-from-netstat>
  • 在您的 vagrant 主机内的一个单独的 ssh 会话终端node-inspector中,在前台启动 node-inspector Web 服务器。确保您看到正常的输出并且没有错误。
  • 现在连接到正确的 URL,这可能类似于http://localhost:8080/debug?port=5858(除非您的 vagrant IP/port 不同)
  • 如果您到达那里并解决了您在此过程中看到的任何意外错误,那么事情确实应该有效,但如果没有发布有关EADDRINUSE您看到的此错误的一些确切细节。这是您的应用程序本身的例外吗?如果是这样,您的快速应用程序的陈旧实例是否已经在您的 vagrant 主机中的其他地方运行并因此绑定在您的应用程序的 Web 服务器端口上?
于 2014-05-22T05:45:53.493 回答
0

同样的过程也适用于主管。

于 2015-09-04T02:52:36.180 回答