范例:
let { id } = await User.findOne({ email }, '_id').exec();
if (!id) throw "error";
测试这两条指令,我意识到当findOne
函数没有找到该电子邮件的文档(id)时,它会生成一个错误,并直接跳转到catch。(我使用try-catch)。
在这种情况下,第二条指令if永远不会运行。所以,如果指令似乎是无用的:只有在User.findOne中没有错误时才会执行
那么,在调用Mongoose函数后,是否有必要检查错误?或者ALL Mongoose函数自己生成错误,而你只需要使用try-catch?
1条答案
按热度按时间ctehm74n1#
当
Model.findOne
函数没有找到匹配时,它不会抛出错误,也不会跳转到try/catch
中的catch
块。返回null
。在你的代码中,如果你想确保查询找到一个文档(即不是null
),那么你需要做你已经用if (!id)
语句做过的事情。然而,在你的例子中,你试图解构一个没有属性的对象(它甚至不是一个对象,它的
null
),而且它与Mongoose无关。这只是JavaScript,会抛出:为了说明mongoose返回值,您的文档可能看起来像这样:
然后在
try/catch
中查询:而在错误的情况下,它可能看起来像这样:
请注意,当没有找到文档时,
Model.find
的返回值是不同的。在这些情况下,返回值是[]
,因此是一个空数组。在这两种情况下,最好检查
null
(对于findOne
)和[]
(对于find
),这样您就可以中断控制流并向用户返回一条消息,说明没有找到任何东西。总结一下,这将是
Model.findOne
的良好实践:对于
Model.find
来说,这是一个很好的做法: