我正在研究猫鼬,并且有一个查询示例:
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起作用?
答案 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;
}
}