Node.js堆栈跟踪信息

时间:2014-01-27 18:45:06

标签: node.js mongoose stack-trace

我正在寻找关于Node.js错误堆栈的信息,以及为什么层中似乎缺少它们。我们在Mongo数据库中找不到用户时会抛出错误。我们使用Mongoose作为ODM。我们的错误管理非常简单 - 当对Mongoose的调用返回空时,我们创建一个新的错误对象。我们使用Winston进行记录,并使用堆栈跟踪记录我们的错误。但我们似乎缺少一些信息。您会注意到下面的代码行,其中发生错误 - “/var/app/current/models/users_model.js:19:9”。问题是,它隐藏在一堆Mongoose调用中,并没有显示我们哪个模块实际调用它。我不知道这是否正常,或者只是因为它被困在Mongoose承诺链中,我所需要的信息已被切断。任何想法或信息将不胜感激。

“message”:“{\”message \“:\”USER_NOT_FOUND \“,\”stack \“:\”错误:__(USER / NOT / _ 69:11)\ n在Promise。 (/var/app/current/models/users_model.js:19:9)nn在Promise。 (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)nn在Promise.emit上的Promise.EventEmitter.emit(events.js:95:17)\ n( Promise.fulfill上的/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)nn(/ var / app / current / node_modules / mongoose / node_modules / mpromise / lib / promise .js:92:20)\ n at /var/app/current/node_modules/mongoose/lib/query.js:1784:30nn at /var/app/current/node_modules/mongoose/lib/utils.js: 414:16 \ n at /var/app/current/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js:953:5\n at / var / app / current / node_modules / mongoose / node_modules / mongodb / LIB / mongodb的/ cursor.js:683:35 \ “}”

2 个答案:

答案 0 :(得分:2)

这很正常。 Node.js中的数据库调用(通常)是异步的,因此堆栈跟踪的顶部将是表示从数据库返回的数据的事件。导致该请求的堆栈在那时完成,因此您正在寻找的信息已经消失。

答案 1 :(得分:1)

我最终找到了一些东西,它们在组合中起作用。一个是名为“longjohn”的npm模块。这会从多个异步调用中收集堆栈跟踪。我将它添加到server.js文件的顶部:

    require('longjohn').async_trace_limit = 500;

但是单个堆栈跟踪的长度仍然太短。所以我开始使用节点:

    node --stack-trace-limit=500 server.js

这给了我一个怪物堆栈跟踪,但它确实包含了我想要的信息。绝对不是要在生产中添加的东西,但对于开发中的调试肯定很棒。

如果有办法收集一些变量并将它们投入其中,那就太好了。我们试图理解的真正问题是为什么响应返回空,这意味着无效数据被传递给它。但是在堆栈跟踪中看不到。