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

MongoDB驱动移除回调后,如何修复删除接口的Cannot DELETE错误?

问题修复方案

核心问题分析

  1. 路由配置错误:Cannot DELETE /posts/(id) 说明请求路径或后端路由未正确配置动态参数。正确的路由规则应为 DELETE /posts/:id,请求时需替换为实际帖子ID(比如 /posts/60d21b4667d0d8992e610c85,路径中不能带括号)。
  2. 回调用法过时:当前代码混用async/await与回调模式,Mongoose已不再推荐回调写法,且外层try/catch无法捕获回调内的错误。

修复后的代码

export const remove = async (req, res) => {
  try {
    const postId = req.params.id;
    // 改用async/await调用,移除回调
    const deletedPost = await PostModel.findOneAndDelete({ _id: postId });

    if (!deletedPost) {
      return res.status(404).json({
        message: "Post was not found",
      });
    }

    res.json({ success: true });
  } catch (err) {
    console.log(err);
    // 修正错误文案,匹配删除操作场景
    res.status(500).json({
      message: "Failed to delete post",
    });
  }
};

关键修改点

  • 移除findOneAndDelete的回调参数,改用await获取返回结果,让错误能被外层try/catch统一捕获
  • 修正catch块中的错误提示文案(原文案为"获取帖子失败",与删除操作不匹配)
  • 确保后端路由配置正确(以Express为例):
    // Express路由配置示例
    app.delete('/posts/:id', remove);
    

额外验证步骤

  • 确认Postman请求方法为DELETE,路径为/posts/实际帖子ID,无多余括号
  • 在函数开头添加console.log(postId),验证req.params.id是否正确获取到值
  • 确认PostModel的Schema中_id为默认ObjectId类型,与传入的ID格式匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:12:49