首页 > 解决方案 > 为什么 findOneAndUpdate 运行 .then 即使返回的对象为空?猫鼬

问题描述

这是我的代码:

User.findOneAndUpdate(
    { confirmationToken: "blablabla" },
    { confirmationToken: "", confirmed: true },
    { new: true }
    )
    .then(user => res.json({ user: user.toAuthJSON() }) )
    .catch(err => res.json({ err }));
)

当没有任何用户拥有这样的确认令牌时,findOneAndUpdate 返回 null 但为什么它运行 .then 而不是 .catch?当返回用户时运行 .then 并在返回时运行 .catch 是 NULL 而不是用户对象?

标签: reactjsmongodbmongoose

解决方案


返回null是有效的响应。为了保护您的代码,您可以:

User.findOneAndUpdate(
    { confirmationToken: "blablabla" },
    { confirmationToken: "", confirmed: true },
    { new: true }
    )
    .then(user => res.json({ user: user ? user.toAuthJSON() : user }) )
    .catch(err => res.json({ err }));
)

或者,如果击球是你真正想要的,你也可以throw在里面。.then

根据Model.findOneAndUpdate上的猫鼬文档:

找到匹配的文档,根据更新参数更新它,传递任何选项,并将找到的文档(如果有)返回给回调。


推荐阅读