Mongoose 异步等待中的错误处理
如何为Mongoose(当前版本v5.1.5)实现错误处理 例如,假设下面的代码正在查找用户详细信息Mongoose 异步等待中的错误处理,mongoose,mongoose-schema,koa2,Mongoose,Mongoose Schema,Koa2,如何为Mongoose(当前版本v5.1.5)实现错误处理 例如,假设下面的代码正在查找用户详细信息 let u = await user.find({ code: id }).lean(); return u; 如果出现错误,应如何处理 第二,我们是否可以拥有集中的错误处理功能,当任何Mongoose代码中发生错误时,该功能将被触发,它将被定向到项目中可以处理的特定功能 异步等待的.catch方法中会出现错误 假设你有一个函数 handleErrors(req, res, err) {
let u = await user.find({ code: id }).lean();
return u;
如果出现错误,应如何处理
第二,我们是否可以拥有集中的错误处理功能,当任何Mongoose代码中发生错误时,该功能将被触发,它将被定向到项目中可以处理的特定功能 异步等待的
.catch
方法中会出现错误
假设你有一个函数
handleErrors(req, res, err) {
return res.json({
success: false,
message: err,
data: null
})
}
这是您的查询
try {
let u = await user.find({ code: id }).lean();
return u;
} catch(err) {
handleErrors(req, res, err) //You will get error here
}
您可以在这里查看更多猫鼬维护者。第一个问题的答案是正确的。Re:“其次,我们是否可以拥有集中的错误处理功能,每当Mongoose代码中发生错误时,就会触发该功能,并将其定向到项目中可以处理该错误的特定功能。”请尝试以下操作:
async function run() {
await mongoose.connect(connectionString);
const schema = new mongoose.Schema({ n: Number });
schema.post('findOne', function(err, doc, next) { console.log('Got error', err.stack); });
const Test = mongoose.model('Test', schema);
console.log(await Test.findOne({ n: 'not a number' }));
}
这是我在上的博客文章,你将在
中得到错误。异步等待的catch
方法,你可以简单地抛出它,但当我尝试u时,u(…)。catch(…)
它说TypeError:u。然后它不是一个函数
async/wait直接处理承诺的解析,而不是使用then/catch,查看Ashish答案:)user.find可能不会触发捕获,因为它不被视为未找到用户的异常。在这种情况下,这只适用于更“意外错误”的情况…@JavierAviles对于您的同类信息“未找到用户”不是回调错误。。。这只是一个条件,即数据库中没有匹配的crieria,请不要在看到其他答案后更新答案。我错误地理解他想要控制一个纯错误,我以为他指的是“用户未找到”错误。我的错在那里。在做了一些搜索以改进我的答案后,我更新了意外错误。。。冷静点,我来这里只是想以一种利他的方式帮助像你这样的人。。。现在的人怎么了…@JavierAviles我很感激你的努力。。。顺便说一句,我没有投你反对票。您可以删除您的答案以恢复您的声誉。。。谢天谢地,像这样的方法可以作为一个中间件来实现:但可以捕获所有异常,这将是一个全局解决方案。如果您只想要mongoose异常,您可以按照更新的Ashish答案执行