Node-inspector与Express 4的集成

11

我正在尝试在一个Express 4应用中运行node-inspector -- 我在Vagrant虚拟机中运行这个应用,但是我能够在浏览器中查看页面而没有任何问题(我已经把Vagrant机器上的端口开放给主机)。

我使用npm startnode --debug bin/www来启动应用程序,然后启动节点调试器bin/www。我在浏览器中加载检查器,它会命中第一行上的初始断点,但是执行任何操作以触发断点的页面会导致EADDRINUSE(即端口被占用)错误。我对可能导致这种情况感到有些困惑,但很可能我正在使用适用于Express 3而不是4的命令。此外,也许还有一些配置我错过了,可以在主机机器的浏览器上运行调试器,而在Vagrant虚拟机上运行检查器?

2个回答

24

更新: 我相信这是你的问题:

使用命令 node --debug bin/www 开始调试,然后启动 node-debugger bin/www。

不要同时执行两个命令。它们是实现同一目的的两种方式。我更喜欢前一种方法,因为它更简单,并且与 node 自身配合使用无论您是否使用 node-inspector 都可以工作。

总结一下:

  • node-debug bin/www 启动调试模式下的应用程序和 node-inspector web服务在同一个进程中
  • node --debug bin/www 启动调试模式下的应用程序。该命令应该与另一个终端窗口配合使用,在其中将 node-inspector 作为单独的进程运行。我推荐使用这种方法,但两种方法都可以正常工作。

以下是开始排除故障的建议。尝试使用命令的最简形式以使所有内容运行:

  • 在 Vagrant 主机中的一个 ssh 会话终端中,直接在前台使用 node --debug ./bin/www 启动您的应用程序。
    • v8 将尝试绑定到 5858 端口。您应该看到此消息:“debugger listening on port 5858”,而不是此消息:“Failed to open socket on port 5858, waiting 1000 ms before retrying”
    • 如果您看到 "Failed to open socket on port 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主机上是否已经运行着您express应用程序的旧实例,并因此绑定到您应用程序的 Web 服务器端口上呢?

  • 1
    非常感谢您的积极回应。您说得完全正确——同时运行两个程序确实导致了问题。幸运的是,该端口上没有其他程序在运行,因此简单的操作就解决了问题 :) - Ryan Lanciaux
    我遇到的问题是执行这行代码 $ nodemon --debug app.js这是我需要的 $ nodemon --debug-brk bin/www - blackops
    如果你的应用程序运行在3000端口而不是8080端口,那么你应该将端口更改为3000,即http://localhost:8080/debug?port=5858 - jack blank
    @jackblank,那不正确。8080是Node Inspector Web应用程序的端口。您的应用程序端口无关紧要,您可以很好地调试不侦听任何端口(如脚本)的应用程序。 - Peter Lyons

    0

    使用supervisor也是同样的过程。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接