Node.js堆栈跟踪信息

Node.js堆栈跟踪信息,node.js,mongoose,stack-trace,Node.js,Mongoose,Stack Trace,我正在寻找关于Node.js错误堆栈的信息,以及为什么这些错误堆栈中似乎缺少层。当在Mongo数据库中找不到用户时,我们将抛出一个错误。我们使用猫鼬作为ODM。我们的错误管理非常简单——当对Mongoose的调用返回为空时,我们创建一个新的错误对象。我们使用Winston来记录,它用堆栈跟踪记录我们的错误。但我们似乎遗漏了一些信息。您会注意到下面的代码行,其中出现了错误-“/var/app/current/models/users\u model.js:19:9”。问题是,它隐藏在一堆猫鼬调用中

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


“消息”:“{”消息\“:\”用户未找到\“,”堆栈\“:\”错误:用户未找到\ \n在承诺中(/var/app/current/global/response.js:69:11)\n在承诺中。(/var/app/current/models/users\u model.js:19:9)\n在承诺中。(/var/app/current/node\modules/mongoose/node\u modules/mpromise/lib/Promise.js:162:8)\n在承诺中(events.js:95:17)\n在Promise.emit(/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/Promise.js:79:38)\n在Promise.emply(/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:30\n at/var/app/current/node_modules/mongoose/lib/utils.js:414:16\n at/var/app/current/node_modules/mongoose/node_modules/mongoose/mongoose/node_modules/collection.js:953:5\n at/var/app/node_modules/mongoose/mongoose/node_modules/mongoodb/lib/mongoodb/mongodb/mongodb/mongo这是正常现象。Node.js中的数据库调用(通常)异步,因此堆栈跟踪的顶部将是表示从数据库返回的数据的事件。导致发出请求的堆栈在该点完成,因此您要查找的信息消失了。

我最终发现了一些在combo中起作用的东西。一个是名为“longjohn”的npm模块。这将收集来自多个异步调用的堆栈跟踪。我已将其添加到server.js文件的顶部:

    require('longjohn').async_trace_limit = 500;
但是单个堆栈跟踪的长度仍然太短。因此,我开始使用节点:

    node --stack-trace-limit=500 server.js
这给了我一个怪物堆栈跟踪,但它确实包含了我想要的信息。肯定不是要在生产中添加的东西,但对于在开发人员中调试来说肯定是很棒的

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