我们有几个使用 mongoose 的 nodejs 守护进程,同时共享相同的持久层(包含查询的共享模块)。
在其中一个守护进程(总是同一个)中,我们随机(每周几次)从 mongoose 得到以下错误:
mongoose: Invalid argument to findOne()
我们检查了所有查询,但无法找出这可能来自何处。错误调用堆栈每次都不同(似乎没有特定的 mongoose 调用导致此问题)因此我们认为这不是特定于业务逻辑的。
为了进行一些调试,我们添加了以下日志记录以防错误再次发生:
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
是 mongoose 提示的参数。 log() 将 JSON.stringify() 整个事情。
这是此调用产生的日志之一:
{
"isInstanceOfMQuery": false,
"isObject": false,
"conds": {},
"toString": "[object Null]"
"inspect": "{}",
}
现在这让我更加困惑了...conds 怎么能同时是 {}
和 null
?!
我正在寻找的答案:
- 如何重现 conds 包含的这种对象?
- 您将如何处理明显随机且很少发生的错误?
- 是否有更多我们可以记录的内容,以便确定 conds 具有什么样的值(value)或它来自哪里?
任何想法表示赞赏!
最佳答案
关于node.js - 暗 Mongoose 魔法 : "Invalid argument to findOne",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397994/