MongoDB findOneAndUpdate()不支持回调函数的代码修复咨询
修复
findOneAndUpdate()回调报错的方案 你遇到的错误是因为新版Mongoose/MongoDB驱动已经废弃了findOneAndUpdate的回调参数支持,现在必须使用Promise或async-await语法处理异步操作。以下是两种可行的修复方式:
方式1:使用async-await(推荐,代码更易读)
将路由处理函数改为async函数,用try/catch捕获错误:
// UPDATE - user update username app.put('/users/:Username', async (req, res) => { try { const updatedUser = await Users.findOneAndUpdate( { Username: req.params.Username }, { $set: { Username: req.body.Username, Password: req.body.Password, Email: req.body.Email, Birthday: req.body.Birthday } }, { new: true } // 返回更新后的文档 ); if (!updatedUser) { return res.status(404).send('用户未找到'); } res.json(updatedUser); } catch (err) { console.error(err); res.status(500).send('Error: ' + err); } });
方式2:使用Promise链式调用
如果暂时不熟悉async-await,也可以用Promise的.then()和.catch()替代回调:
// UPDATE - user update username app.put('/users/:Username', (req, res) => { Users.findOneAndUpdate( { Username: req.params.Username }, { $set: { Username: req.body.Username, Password: req.body.Password, Email: req.body.Email, Birthday: req.body.Birthday } }, { new: true } ) .then(updatedUser => { if (!updatedUser) { return res.status(404).send('用户未找到'); } res.json(updatedUser); }) .catch(err => { console.error(err); res.status(500).send('Error: ' + err); }); });
额外提示
- 确保你的Mongoose版本在v5及以上,这些版本原生支持async-await语法
- 生产环境中不要直接存储明文密码,建议给
Password字段添加哈希处理,这是用户数据安全的基本要求
内容的提问来源于stack exchange,提问作者jowww
相关产品推荐
相关产品推荐

