Mongoose 7.3.1报错:Model.find()不再接受回调,求技术支持
解决Mongoose 7.x中Model.find()不支持回调的问题
错误原因
Mongoose 7.x版本彻底移除了Model.find()及其他查询方法的回调参数支持,这是官方为统一异步处理逻辑做出的变更,旧的回调写法会直接抛出Model.find() no longer accepts a callback错误。
修复方案
你需要把回调写法改成async/await(推荐)或者Promise链式调用:
1. 使用async/await(代码更简洁易读)
先看你原来的错误写法(类似这样):
// 旧写法(Mongoose 7.x不兼容) YourModel.find({}, (err, data) => { if (err) { // 处理错误 } else { // 处理数据 } });
改成async/await版本:
// 新写法:包裹在async函数中 async function fetchData() { try { const data = await YourModel.find({}); // 处理获取到的数据 console.log(data); } catch (err) { // 捕获并处理错误 console.error('查询失败:', err); } } // 调用函数 fetchData();
如果是在Express路由里,直接用async函数作为处理函数:
app.get('/your-route', async (req, res) => { try { const data = await YourModel.find({}); res.json(data); } catch (err) { res.status(500).json({ error: '查询出错: ' + err.message }); } });
2. 使用Promise链式调用
如果你更习惯Promise写法,也可以这样改:
YourModel.find({}) .then(data => { // 处理数据 console.log(data); }) .catch(err => { // 处理错误 console.error('查询失败:', err); });
额外说明
Mongoose 7.x的这个变更和Node.js自身推广Promise/async-await的趋势一致,建议优先使用async/await,能让异步代码更接近同步代码的逻辑,降低维护成本。
内容的提问来源于stack exchange,提问作者rahulkumaryadav
相关产品推荐
相关产品推荐

