使用Mongoose的Model.find()时遇报错:不再支持回调函数
解决MongooseError: Model.find() no longer accepts a callback
这个错误是因为新版Mongoose(6.x及以后版本)已经移除了对回调函数的支持,必须使用Promise风格或者async/await来处理数据库查询的异步操作,以下是两种可行的修改方案:
方案1:使用Promise的then/catch
将原代码中的回调替换为Promise链,分别处理成功和错误场景:
const Movie = mongoose.model('Movie', moviesSchema); app.get('/', (req, res) => { Movie.find({}) .then(movies => { res.render('index', { moviesList: movies }); }) .catch(err => { console.error('查询电影数据失败:', err); res.status(500).send('服务器内部错误'); }); }); app.listen(4000, function() { console.log('server is running'); });
方案2:使用async/await(更简洁)
把路由处理函数声明为async函数,用await等待查询结果,同时通过try/catch捕获错误:
const Movie = mongoose.model('Movie', moviesSchema); app.get('/', async (req, res) => { try { const movies = await Movie.find({}); res.render('index', { moviesList: movies }); } catch (err) { console.error('查询电影数据失败:', err); res.status(500).send('服务器内部错误'); } }); app.listen(4000, function() { console.log('server is running'); });
注意:两种方案都必须处理错误,避免未捕获的Promise异常导致服务崩溃或请求超时。
内容的提问来源于stack exchange,提问作者Muhammad Numan
相关产品推荐
相关产品推荐

