繁体   English   中英

猫鼬 - 如何处理空结果

[英]Mongoose - How to handle empty results

我是Mongo DB / Mongoose的新手,我想确保我以正确的方式接近Mongoose错误。 我正在尝试通过'_id搜索文档。 这是我的查询:

const team = await Team.findOne({_id:req.body.invitedTeamID});

这工作正常,但我需要验证是否从这个查询返回任何记录所以经过一些研究我修改它是这样的:

const team = await Team.findOne({_id:req.body.invitedTeamID}, function(err, doc){
  if(doc.length === 0 || err){
    console.log("no record found!")
  }
});

当我为inviteTeamID变量输入一个伪造的对象id时,我得到一个丑陋的Mongoose拒绝承诺错误,如下所示:

CastError:对于值“005a99,转换为ObjectId失败

这种情况发生在上述任一函数或上述函数中,我没有得到我的console.log语句。

有人可以建议处理这个问题的正确方法是什么?

谢谢

首先,您可以使用快捷方法Model.findById()通过ObjectId进行查询。 其次,您正在混合异步函数回调函数 您需要为方法添加三件事:

  1. 验证ObjectId
  2. 检查查询的返回值
  3. 错误处理

修改后的方法如下所示:

const mongoose = require('mongoose');
const Team = require('../models/Team');

async function getTeamById(id) {
  if (!mongoose.Types.ObjectId.isValid(id)) {
    // handle bad id
  }
  try {
    const team = await Team.findById(id);
    if (!team) {
      // no team with such id, error handling code
    }
    // team was obtained, rest of the code
  } catch (error) {
    // handle query error
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM