簡體   English   中英

使用貓鼬查詢某些內容時如何捕獲錯誤

[英]how to catch an error when using mongoose to query something

我正在研究貓鼬,我有一個查詢示例:

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 success--> null'。 我怎樣才能使 try/catch 工作?

Mongoose 的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);
    if(!data) {
      throw new Error('no document found');
    }
    console.log(`findOne success--> ${data}`);
    return data;
} catch (error) {
    console.log(`findOne error--> ${error}`);
    return error;
}

您可以在 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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM