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

使用Node.js+Mongoose发起PUT请求失败,无响应问题求助

Mongoose PUT请求无响应问题解决

问题根源

你的代码存在两个核心问题,导致请求挂起无响应:

  1. 错误处理不完整:仅在无错误时返回响应,出现错误时没有任何返回逻辑,请求会一直处于等待状态。
  2. 未处理无匹配文档的情况:即使没有错误,但如果找不到对应标题的文章,updateMany不会触发错误,但也不会返回响应,导致请求卡住。

修复方案

方案1:完善updateMany的回调逻辑

app.route("/articles/:articleTitle")
  .put(function (req, res) {
    Article.updateMany(
      { title: req.params.articleTitle },
      { title: req.body.title, content: req.body.content },
      { overwrite: true },
      function (err, result) {
        // 处理错误
        if (err) {
          return res.status(500).send("更新失败:" + err.message);
        }
        // 处理无匹配/无修改的情况
        if (result.modifiedCount === 0) {
          return res.status(404).send("未找到目标文章,或内容无变化");
        }
        // 更新成功返回响应
        res.send("数据更新成功!");
      }
    );
  });

方案2:改用findOneAndUpdate(更适合单文档更新)

如果你的文章标题是唯一的,推荐用findOneAndUpdate,逻辑更清晰:

app.route("/articles/:articleTitle")
  .put(function (req, res) {
    Article.findOneAndUpdate(
      { title: req.params.articleTitle },
      { title: req.body.title, content: req.body.content },
      { overwrite: true, new: true }, // new: true 返回更新后的文档
      function (err, updatedArticle) {
        if (err) {
          return res.status(500).send("更新失败:" + err.message);
        }
        if (!updatedArticle) {
          return res.status(404).send("未找到要更新的文章");
        }
        res.send("数据更新成功!");
      }
    );
  });

额外检查项

  • 确保已配置请求体解析中间件,否则req.body会是undefined:
    // 在路由前添加
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
  • 检查Postman配置:确认请求方法为PUT,URL参数articleTitle正确,请求体格式为JSON(或表单),且title、content参数已正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:36:08