猫鼬 - 如何处理空结果

问题描述 投票:3回答:1

我是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语句。

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

谢谢

javascript mongodb mongoose
1个回答
2
投票

首先,您可以使用Model.findById()快捷方法ObjectId进行查询。其次,你正在混合async functioncallback function。您需要为方法添加三件事:

  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
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.