gpt4 book ai didi

node.js - 暗 Mongoose 魔法 : "Invalid argument to findOne"

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:18 27 4
gpt4 key购买 nike

我们有几个使用 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 bug使用 PR 修复 here .它尚未包含在版本中。

它不能可靠地重现,因为它似乎依赖于指针和 v8 的垃圾收集。只需要等待它在上游修复。

关于node.js - 暗 Mongoose 魔法 : "Invalid argument to findOne",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com