使用猫鼬查询内容时如何捕捉错误

时间:2019-06-02 18:01:32

标签: javascript mongodb

我正在研究猫鼬,并且有一个查询示例:

async findOne(condition, constraints) {
        try {
            let data = await User.findOne(condition, constraints ? constraints : null);
            console.log(`findOne success--> ${data}`);
            return data;
        } catch (error) {
            console.log(`findOne error--> ${error}`);
            return error;
        }
    }

我认为,当方法findOne无法使用时,此代码将捕获错误。然后我发现当方法findOne返回null时,在控制台中有一个'findOne成功-> null'。如何使try / catch起作用?

2 个答案:

答案 0 :(得分:2)

猫鼬的findOne()返回null时找不到文档,并且null不是错误。

如果没有文档与给定的过滤器匹配,则可以使用.orFail()引发错误。这对于与async / await集成非常方便,因为orFail()为您节省了额外的if语句,用于检查是否未找到文档:

let data = await User.findOne(condition, constraints ? constraints : null).orFail();

或者在没有结果时抛出错误

try {
    let data = await User.findOne(condition, constraints ? constraints : null);
    console.log(`findOne success--> ${data}`);
    if(!data) {
      throw new Error('no document found');
    }
    return data;
} catch (error) {
    console.log(`findOne error--> ${error}`);
    return error;
}

答案 1 :(得分:0)

您可以在try块的if中添加更多条件,并抛出一个customError,它将在catch块处捕获。

我希望这能解决问题。

请参见下面的代码段

async findOne(condition, constraints) {
  try {
      let data = await User.findOne(condition, constraints ? constraints : null);
      console.log(`findOne success--> ${data}`);
      if(data){
        // do your logic
        return data;
      }
      const customError = {
        code : 500,
        message: 'something went wrong'
      }
      throw customError
  } catch (error) {
      console.log(`findOne error--> ${error}`);
      return error;
  }
}