Javascript Visual Studio代码-如何调试node.js路由?

Javascript Visual Studio代码-如何调试node.js路由?,javascript,node.js,express,visual-studio-code,Javascript,Node.js,Express,Visual Studio Code,因此,我的应用程序结构如下: server.js router routes emails.js index.js module.exports = function (app) { app.use('/emails', require('./routes/emails')); }; router.get(/*'/emails */'/:id', function (req, res, next) { console.log('rout

因此,我的应用程序结构如下:

server.js
    router
       routes
          emails.js
    index.js
module.exports = function (app) {
app.use('/emails', require('./routes/emails'));
};
router.get(/*'/emails */'/:id', function (req, res, next) {
   console.log('route hit');
})
我在index.js中定义了我的路线,如下所示:

server.js
    router
       routes
          emails.js
    index.js
module.exports = function (app) {
app.use('/emails', require('./routes/emails'));
};
router.get(/*'/emails */'/:id', function (req, res, next) {
   console.log('route hit');
})
emails.js有一个简单的获取路径,如下所示:

server.js
    router
       routes
          emails.js
    index.js
module.exports = function (app) {
app.use('/emails', require('./routes/emails'));
};
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进行调试的能力。

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


所以我知道发生了什么。。。我正在发帖,以防其他人发现这个问题。解决方案看似简单——将此代码移动到server.js中:

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

在设置服务器变量之前执行。我没有太多的时间去探究为什么这会带来不同,但我希望它能帮助一些人。。。Express中端点的顺序非常重要

我怀疑您通过命令提示符打开了应用程序,然后使用的是VSCode调试器

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


关闭从命令提示符启动的应用程序,并将断点放在回调中,然后重试。它可以工作:)

API调用看起来像什么,使用什么URL,您当前的路由只匹配
/emails/something
,不匹配
/emails/
不匹配
/
或者任何其他相关的
路由器。get()
在启动时运行并注册路由处理程序<代码>路由器。get()不会再次调用。相反,您需要在注册为路由处理程序的特定回调内设置一个断点,当路由与传入请求匹配时,该断点将被命中。这与node.js无关,而是注册为事件处理程序的回调是如何工作的(node.js经常使用这种设计模式,但不是node.js独有的)。Adeneo-我知道这条路线是正确的,因为代码正在执行。jfriend00-我正试着对这一点进行思考。。。通过我的断点,我可以看到server.js启动时正在设置的路由,但我不确定如何在回调中以不同的方式设置断点(而不是在console.log上)。我是否需要将代码移到另一个函数中,并从router.get调用它?