Node.js堆栈跟踪信息

我正在寻找关于Node.js错误堆栈的信息,以及为什么图层似乎从它们丢失。 我们在Mongo数据库中找不到用户时发生错误。 我们使用mongoose作为ODM。 我们的错误pipe理非常简单 – 当调用Mongoose时,我们创build一个新的错误对象。 我们使用Winston进行login,并使用堆栈跟踪logging我们的错误。 但是我们似乎错过了一些信息。 你会注意到下面的错误发生的代码行 – “/var/app/current/models/users_model.js:19:9”。 问题是,它被埋在一堆Mongoose调用中,并没有显示我们的模块实际调用了哪个模块。 我不知道这是否正常,或者仅仅是因为它陷入了一个mongoose的承诺链,我所需要的信息已经被切断了。 任何想法或信息将不胜感激。

“/ message /”:\“USER_NOT_FOUND \”,\“stack \”:\“Error:USER_NOT_FOUND \ n at _e(/var/app/current/global/response.js:69:11 )\ n在Promise。 (/var/app/current/models/users_model.js:19:9)\n在Promise。 (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)\n在Promise.EventEmitter.emit(events.js:95:17)\ n在Promise.emit /var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)在Promise.fulfill(/ var / app / current / node_modules / mongoose / node_modules / mpromise / lib / promise .js:92:20)\ n在/var/app/current/node_modules/mongoose/lib/query.js:1784:30\n位于/var/app/current/node_modules/mongoose/lib/utils.js: 414:16 \ n在/ var / app / current / node_modules / mongoose / node_modules / mongodb / mongodb / mongodb / LIB / mongodb的/ cursor.js:683:35 \ “}”

这个是正常的。 Node.js中的数据库调用(通常)是asynchronous的,所以堆栈跟踪的顶部将是表示从数据库返回的数据的事件。 导致请求的堆栈在那个时候完成,所以你正在寻找的信息已经消失了。

我终于find了一些事情,在组合工作。 一个是名为“longjohn”的npm模块。 这从多个asynchronous调用收集堆栈跟踪。 我将它添加到我的server.js文件的顶部:

require('longjohn').async_trace_limit = 500; 

但是单个堆栈轨迹的长度仍然太短。 所以我开始与节点:

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

然后这给了我一个怪物堆栈跟踪,但它确实包含我想要的信息。 绝对不是在生产中join的东西,但是在dev中debugging确实很好。

如果有一种方法来收集一些variables并把它们抛在一边,真是太好了。 我们试图了解的真正问题是为什么响应会回到空白状态,这意味着无效的数据正在传递给它。 但是在堆栈跟踪中看不到。