簡體   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