猫鼬 - 如何处理空结果

时间:2018-03-02 18:33:41

标签: javascript mongodb mongoose

我对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:对于值#34; 005a99

,强制转换为ObjectId

对于上述任一功能或上述功能都会发生这种情况,而且我没有得到我的console.log语句。

有人可以告诉我们处理这个问题的正确方法吗?

由于

1 个答案:

答案 0 :(得分:2)

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

  1. 验证ObjectId
  2. 检查查询的返回值
  3. 错误处理
  4. 修改后的方法如下所示:

    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
      }
    }