7
我們有幾個nodejs守護進程在共享相同的持久層(包含查詢的共享模塊)時利用貓鼬。黑暗貓鼬魔法:「無效的參數findOne」
在這些守護進程中的一個(總是同一個),我們隨機(數週時間)得到貓鼬以下錯誤:
貓鼬:無效的參數findOne()
我們已經檢查了所有查詢,但無法找出可能來自哪裏。錯誤調用堆棧每次都不相同(沒有特定的貓鼬調用似乎會導致此問題),所以我們不認爲這是特定於業務邏輯的。
爲了做一些調試,我們添加了以下日誌記錄的情況下,該錯誤再次出現:
log({
// What mongoose checks (both false -> the error).
isInstanceOfMQuery: conds instanceof mquery,
isObject: mquery.utils.isObject(conds),
// Trying to find out what this value is.
conds,
toString: Object.prototype.toString.call(conds)
inspect: util.inspect(conds, { showHidden: true, depth: null, showProxy: true })
})
conds
是貓鼬被抱怨的理由。 log()將JSON.stringify()整個事情。
這是源於此呼叫日誌之一:
{
"isInstanceOfMQuery": false,
"isObject": false,
"conds": {},
"toString": "[object Null]"
"inspect": "{}",
}
現在,這個讓我困惑甚至更多... conds如何能在同一時間{}
和null
?
答案我在尋找:
- 我怎樣才能重現此那種conds包含對象的?
- 你會如何處理一個顯然隨機且很少發生的錯誤?
- 有更多的我們可以登錄,以確定conds具有什麼樣的價值或來自哪裏?
任何想法讚賞!
你正在運行什麼版本的節點?我問,因爲我已經看到了隨機與節點7.4.0但不是與6.9.2。 – Brett
我看到一些其他非常令人震驚的東西,看起來像是在使用Mongoose 4在節點7中使用神奇空查詢對象做的事情,再次沒有觀察到節點6. – Brett
我們已經運行在最新的7.x版本相當長一段時間了。我剛纔做了一個拉動要求,讓貓鼬一起工作。奇怪的是,我們使用同一個節點版本運行的所有其他守護進程都沒有這個問題: -/ 感謝您的提示! – patrickd