2014-01-27 229 views
1

我正在尋找關於Node.js錯誤堆棧的信息,以及爲什麼圖層似乎從它們丟失。當我們的Mongo數據庫中找不到用戶時,我們會拋出一個錯誤。我們將Mongoose用作ODM。我們的錯誤管理非常簡單 - 當對Mongoose的調用恢復爲空時,我們創建一個新的錯誤對象。我們使用Winston進行登錄,並使用堆棧跟蹤記錄了我們的錯誤。但我們似乎錯過了一些信息。你會注意到我們的代碼在哪裏,錯誤發生在哪裏 - 「/var/app/current/models/users_model.js:19:9」。問題是,它被埋在一堆Mongoose調用中,並沒有顯示我們的哪個模塊實際調用了它。我不知道這是否正常,或者僅僅是因爲它陷入了貓鼬的承諾鏈中,我所需要的信息已被切斷。任何想法或信息將不勝感激。在/e(/var/app/current/global/response.js)中發現「USER_NOT_FOUND \ n」錯誤:「{\」message \「:\」USER_NOT_FOUND \「,\」stack \「:\」Node.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 at 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 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 \「}」

回答

1

我終於找到了一些事情,這在組合工作。一個是名爲「longjohn」的npm模塊。這會收集來自多個異步調用的堆棧跟蹤。我把它添加到我的server.js文件的頂部:

require('longjohn').async_trace_limit = 500; 

但個別堆棧跟蹤的長度仍然很短。所以我開始與節點:

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

然後,這給了我一個怪物堆棧跟蹤,但它確實包含我想要的信息。絕對不是在生產中添加的東西,但對於在dev中進行調試確實很好。

如果有一種方法可以收集一些變量並將它們摺疊起來,那麼真的很不錯。我們試圖瞭解的真正問題是爲什麼響應會回到空白狀態,這意味着將無效數據傳遞給它。但在堆棧跟蹤中看不到。

2

這是正常現象。 Node.js中的數據庫調用(通常)是異步的,因此堆棧跟蹤的頂部將成爲表示從數據庫返回的數據的事件。導致該請求的堆棧在那一刻完成,因此您正在查找的信息已經消失。