node.js - Express 4 的 Node 检查器

标签 node.js debugging express node-inspector

我正在尝试运行 node-inspector使用 Express 4 应用程序——我在 Vagrant 框中运行它,但能够毫无问题地在浏览器中查看页面(我在 vagrant 机器上的端口可用于主机)。

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

最佳答案

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

node --debug bin/www and then start the node-debugger bin/www.

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

总结一下:

  • node-debug bin/www以 Debug模式启动您的应用并在同一进程中启动 Node 检查器
  • node --debug bin/www以 Debug模式启动您的应用程序。这应该与运行 node-inspector 的单独终端窗口相结合。作为一个单独的过程。我推荐这种方法,但任何一种都可以。

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

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

关于node.js - Express 4 的 Node 检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797931/

相关文章:

node.js - React 没有在简单的 React 组件中定义(通用)

使用 xdebug 进行 php 命令行调试

javascript - 如何调试这段nodejs代码?

node.js - express cookie 返回 undefined

node.js - 来自 body-parser Node JS 的不需要的格式

node.js - 在 mongodb select 中使用偏移量和限制

javascript - 在 JavaScript 中读取数组

excel - 在立即窗口中执行...结束语句,Excel VBA

node.js - 在带路由的 Express 中使用 RE 和命名时的“0”项

javascript - 当 Promise 无法传递给第三方库时怎么办?