【发布时间】:2015-07-17 03:09:45
【问题描述】:
我已经设置了一个可以运行的 Web 应用程序,现在我想学习如何在不使用 console.log 的情况下正确调试它。我已经通过 node-debug server.js(主脚本文件)设置并运行了 Node-Inspector,我想使用并检查当我为以下 post 函数中的示例设置断点时会发生什么。
.post('/login', function (req, res){
var user = {
username: req.body.username,
password: hash(req.body.password)
};
db.findOne(user, function (err, data) {
if (data) {
req.session.userId = data.id;
res.redirect('/');
} else {
res.redirect('/login');
}
});
})
Node 检查器运行良好,我熟悉它的设计,因为使用 Google Chrome 开发人员工具进行基本的 JavaScript 调试(jQuery 等)已经有一段时间了。在我尝试登录应用程序之前,一切看起来都很好。它不是插入示例“var user”行,而是简单地在某种 setImmediate 函数中跳转到“timer.js”文件中。即使当我试图跳过时,我也永远不会到达那个断点,我希望看到 post 函数在 req、res 变量等中包含什么。
我正在使用 NodeJS v0.12.2 和节点检查器 0.10.0。
我在项目中使用 body-parser、bourne、express 和 express-session 模块。也许值得一提的是,我在不同于 8080 或 5858 的端口上运行应用程序,如果可能是这种情况,我在另一个 .js 文件中也有指定的代码,因为我可以成功地断点前几行(需要)主服务器js文件。
我不知道该做什么或如何在一个简单的 if 语句中设置断点。它只是简单地进入了一些 timers.js 并完成了一些步骤。
知道为什么会这样吗?
提前致谢。
【问题讨论】:
-
这不会回答你的问题,但你应该看看 webstorm。它是一个完整的 Node.js IDE,它使调试变得非常容易。可免费下载 30 天试用
-
我之前研究过,但仍然使用仅用于调试的 IDE 有点太多了。谢谢你的建议。
-
也许 chrome 调试器出错了,因为它是一个多行语句?您可以尝试将断点放在
db.findOne行,或尝试在代码中放置debugger;语句,看看是否有任何工作。 -
我尝试在 db.findOne 中添加调试器,但仍然出现相同的错误。它只是在 timer.js 中的某个地方中断,更奇怪的是,在我删除之前创建的断点之后,它仍然在 timers.js 中的某个地方中断,尽管里面绝对没有一个断点(或“调试器”)......
-
同样奇怪的东西,但我在 events.js 中使用并且从未达到我的断点。找到解决办法了吗?
标签: javascript node.js debugging express node-inspector