[英]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.