Mongoose 异步等待中的错误处理

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) {

如何为Mongoose(当前版本v5.1.5)实现错误处理

例如,假设下面的代码正在查找用户详细信息

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答案执行