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

使用Node.js Mongoose实现删除功能时报404错误如何解决

Mongoose删除接口返回404问题排查及修复方案

404错误核心原因排查

  • 请求配置不匹配:调用接口时未使用DELETE请求方法,或请求路径与/tm/v1/tasks不完全一致,包括多写尾斜杠、路径段拼写错误、漏加全局路由前缀(如有app.use挂载路由的场景)
  • 路由注册顺序错误:该DELETE路由注册在Express全局404处理中间件之后,请求会被优先匹配到404中间件直接返回
  • 路由规则不匹配:如果实际是按RESTful规范把id放在路径参数(如/tm/v1/tasks/:id),但请求时未携带路径id,会无法命中路由返回404

原有代码存在的其他逻辑错误

就算404问题修复,现有代码也无法正常运行,存在以下问题:

  • findOneAndDelete第一个参数需传入查询条件对象,直接传入req.body.id无法匹配到数据
  • 错误分支未加return,报错后仍会执行后续响应逻辑,导致重复设置响应头报错
  • 变量名不匹配:回调参数名为car但返回时用了tasks,错误变量捕获为err但返回时用了error,都会触发未定义报错

修复后的完整代码

// 如果id放在请求body中,使用该路由
app.delete("/tm/v1/tasks", (req, res) => {
  Task.findOneAndDelete({_id: req.body.id}, (err, deletedTask) => {
    if (err){
      return res.status(500).json({msg: err});
    }
    res.status(200).json({task: deletedTask});
  })
});

// 更符合RESTful规范的写法,id放在路径参数中,请求路径为 /tm/v1/tasks/【数据id】
app.delete("/tm/v1/tasks/:id", (req, res) => {
  Task.findOneAndDelete({_id: req.params.id}, (err, deletedTask) => {
    if (err){
      return res.status(500).json({msg: err});
    }
    res.status(200).json({task: deletedTask});
  })
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03