You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

勾选待办项删除时报错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:22:24