【问题标题】:Visual Studio Code - how to debug node.js routes?Visual Studio Code - 如何调试 node.js 路由?
【发布时间】:2016-06-06 02:45:34
【问题描述】:

所以我的应用程序结构如下:

server.js
    router
       routes
          emails.js
    index.js

我在 index.js 中定义了我的路由,如下所示:

module.exports = function (app) {
app.use('/emails', require('./routes/emails'));
};

emails.js 有一个简单的 get 路由,如下所示:

router.get(/*'/emails */'/:id', function (req, res, next) {
   console.log('route hit');
})

我在每一行(app.use、router.get 和 console.log)都设置了断点。当我第一次启动我的应用程序时,app.use 和 router.get 的断点被命中。当我进行 API 调用时,我的代码会执行,但我的断点永远不会被命中。

我假设这是我需要配置 VS 代码的一些内部 Node.js 东西,但我不知道该怎么做。

有谁知道让它工作的方法吗?我真的很想使用路由并且没有庞大的 server.js 文件,但不是没有使用 IDE 进行调试的能力。

【问题讨论】:

  • API 调用是什么样的,使用的 URL 是什么,你当前的路由只匹配 /emails/something,而不是 /emails/ 不是 / 或其他任何事情
  • router.get() 在启动时运行并注册一个路由处理程序。 router.get() 不再被调用。相反,您需要在注册为路由处理程序的特定回调中设置一个断点,并且当路由与传入请求匹配时,该断点将被命中。这与 node.js 无关,而是注册为事件处理程序的回调如何工作(node.js 经常使用的设计模式,但不是 node.js 独有的)。
  • Adeneo - 我知道路由是正确的,因为代码正在执行。
  • jfriend00 - 我正在努力解决这个问题......通过我的断点,我可以看到 server.js 启动时正在设置的路由,但我不确定如何设置回调内部的断点不同(不在console.log上)。我是否需要将我的代码移到另一个函数中并从 router.get 中调用它?

标签: javascript node.js express visual-studio-code


【解决方案1】:

所以我弄清楚了发生了什么......我发帖以防其他人发现这个问题。解决方案看似简单 - 在 server.js 中移动此代码:

var router = require('./router')(app);

在我设置服务器变量之前执行。我没有太多时间来深入探讨为什么这会有所作为,但我希望它对某人有所帮助... Express 中的端点顺序非常重要!

【讨论】:

    【解决方案2】:

    只需将调试器放在要中断代码的行上,然后从终端运行 node debug server.js。

    https://nodejs.org/api/debugger.html

    【讨论】:

      【解决方案3】:

      我怀疑你已经通过命令提示符打开了应用程序,然后你正在使用 VSCode 调试器。

      不知何故,VSCode 调试器不会抛出有关已占用端口的错误,但如果应用程序已经使用命令提示符启动,则在这种情况下调试不起作用。

      关闭从命令提示符启动的应用程序并将断点放在回调中并尝试。它有效:)

      【讨论】:

        猜你喜欢
        • 2015-12-13
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多