Mongoose报错:Model.findOneAndRemove()不再支持回调函数
解决Mongoose
findOneAndRemove() 不支持回调的问题 你遇到的错误是因为Mongoose 6.x及以上版本已移除对回调函数的支持,findOneAndRemove() 现在仅返回Promise,无法再传入回调参数。以下是两种可行的修改方案:
方案1:使用Promise的then/catch替代回调
app.post("/delete", (req, res) => { Data.findOneAndRemove({ _id: req.get("id") }) .then(deletedItem => { if (deletedItem) { console.log("删除成功:", deletedItem); res.send("Deleted!"); } else { console.log("未找到要删除的文档"); res.status(404).send("Document not found"); } }) .catch(err => { console.log("删除失败:", err); res.status(500).send("Failed to delete document"); }); });
方案2:使用async/await(更简洁易读)
app.post("/delete", async (req, res) => { try { const deletedItem = await Data.findOneAndRemove({ _id: req.get("id") }); if (deletedItem) { console.log("删除成功:", deletedItem); res.send("Deleted!"); } else { console.log("未找到要删除的文档"); res.status(404).send("Document not found"); } } catch (err) { console.log("删除失败:", err); res.status(500).send("Failed to delete document"); } });
额外优化建议
- 原代码中无论删除是否成功都会立即返回"Deleted!",这会导致客户端收到错误反馈,上面的方案已修正该问题:删除成功返回成功响应,找不到目标文档返回404状态码,出现异常返回500状态码。
findOneAndRemove()在Mongoose 6.x中已被标记为废弃,推荐使用findOneAndDelete()替代,用法完全一致,更符合当前API规范:// 替换为findOneAndDelete const deletedItem = await Data.findOneAndDelete({ _id: req.get("id") });
内容的提问来源于stack exchange,提问作者siddharth sonkusre
相关产品推荐
相关产品推荐

