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

Next.js+Mongoose+Axios删除MongoDB产品触发500错误求助

问题诊断与修复方案

核心问题1:错误日志与代码不匹配

你提供的终端错误日志显示报错来自用户删除API(pages/api/admin/users/[id].js)中的user.remove(),但你描述的是删除产品时出错,且提供的是产品删除的API代码。请先确认:

  • 是否误触发了用户删除接口?
  • 若确实是产品删除报错,是否贴错了错误日志?

不过无论哪种情况,报错的本质原因一致:Mongoose v6+ 已移除文档实例的remove()方法,该方法不再被支持,这是导致500错误的根本原因。

核心问题2:Mongoose删除方法过时

你的产品删除代码中使用了product.remove(),这是Mongoose旧版本的写法,在新版本中已被废弃。需要替换为以下两种方案之一:

方案1:使用模型的findByIdAndDelete(更简洁)

直接通过模型根据ID删除文档,无需先查询再删除:

const deleteHandler = async (req, res) => {
    await db.connect();
    // 直接查找并删除
    const deletedProduct = await Product.findByIdAndDelete(req.query.id);
    await db.disconnect();
    if (deletedProduct) {
      res.send({ message: 'Product deleted successfully' });
    } else {
      res.status(404).send({ message: 'Product not found' });
    }
};

方案2:使用文档的deleteOne方法

如果需要先查询文档再执行删除,替换remove()为deleteOne():

const deleteHandler = async (req, res) => {
    await db.connect();
    const product = await Product.findById(req.query.id);
    if (product) {
      // 替换remove()为deleteOne()
      await product.deleteOne();
      await db.disconnect();
      res.send({ message: 'Product deleted successfully' });
    } else {
      await db.disconnect();
      res.status(404).send({ message: 'Product not found' });
    }
};

顺带修复用户删除API的错误

根据你的终端日志,用户删除API(pages/api/admin/users/[id].js)中同样存在user.remove()的问题,需要同步修改:

// 原错误代码
await user.remove();

// 替换为以下二选一:
await user.deleteOne();
// 或者
await User.findByIdAndDelete(req.query.id);

验证步骤

  1. 重启Next.js开发服务器
  2. 测试产品删除功能,确认500错误消失
  3. 若之前的用户删除功能也有问题,同步测试用户删除流程

内容的提问来源于stack exchange,提问作者Hakimisch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:31:56