Mongoose新版本中Model.find()不支持回调,如何实现错误处理逻辑?
Mongoose新版本中Model.find()不支持回调,如何实现错误处理逻辑?
嗨,我来帮你搞定这个问题~ 新版Mongoose确实已经移除了对回调函数的支持,官方现在更推荐用Promise链式调用或者async/await来处理异步操作,下面给你两种完全符合需求的实现方式:
方法一:基于Promise的.then().catch()写法
这是对你原来代码的直接扩展,只需要加上.catch()块来捕获错误即可,逻辑和你原来的回调写法完全对应:
Fruit.find() .then((fruits) => { // 成功获取数据时执行 console.log(fruits); }) .catch((err) => { // 发生错误时执行 console.log('error occurred!'); // 可选:如果需要调试,可以打印具体错误信息 // console.log(err); });
.catch()会捕获find()操作过程中出现的任何异常,比如数据库连接问题、查询语法错误等,完美替代原来回调里的err判断逻辑。
方法二:用async/await搭配try-catch(更推荐)
这种写法更接近同步代码的结构,可读性更强,也是现代JavaScript异步编程的主流方式:
// 定义一个异步函数 async function fetchFruits() { try { // 等待find()操作完成,获取结果 const fruits = await Fruit.find(); console.log(fruits); } catch (err) { // 捕获并处理错误 console.log('error occurred!'); // 可选:打印具体错误辅助调试 // console.log(err); } } // 调用这个异步函数 fetchFruits();
把数据库查询放在try块里,成功就执行后续逻辑;如果出现错误,会自动进入catch块处理,和你原来的回调逻辑功能完全一致,代码结构却清晰很多。
两种方式都是Mongoose官方现在推荐的异步处理方案,再也不会出现Model.find() no longer accepts a callback的错误啦~
备注:内容来源于stack exchange,提问作者Harshini V
相关产品推荐
相关产品推荐

