勾选待办项删除时报错:Model.findByIdAndRemove()不再接受回调函数
解决
Model.findByIdAndRemove() no longer accepts a callback错误 错误原因
Mongoose 6.x及后续版本已移除了findByIdAndRemove(以及findByIdAndUpdate、findOneAndDelete等同类方法)的回调参数支持,这些方法现在仅返回Promise对象,因此你原来传入回调函数的写法会触发错误。
解决方案
方案1:使用Promise的.then()/.catch()语法
将回调逻辑替换为Promise链式调用:
app.post("/delete", function (req, res) { const checkedItemId = req.body.checkbox; Item.findByIdAndRemove(checkedItemId) .then(() => { console.log("Successfully deleted checked item"); res.redirect("/"); }) .catch(err => { console.error("删除待办项失败:", err); res.redirect("/"); }); });
方案2:使用async/await语法(更简洁)
把路由处理函数声明为async函数,配合try/catch处理异步操作:
app.post("/delete", async function (req, res) { try { const checkedItemId = req.body.checkbox; await Item.findByIdAndRemove(checkedItemId); console.log("Successfully deleted checked item"); res.redirect("/"); } catch (err) { console.error("删除待办项失败:", err); res.redirect("/"); } });
额外说明
你也可以用findByIdAndDelete替代findByIdAndRemove,两者在Mongoose中的功能完全一致,写法也完全相同。
内容的提问来源于stack exchange,提问作者AntonioGrgurevic
相关产品推荐
相关产品推荐

