You need to enable JavaScript to run this app. Node.js填写所有必填字段后Patch请求仍无法正常工作如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Node.js填写所有必填字段后Patch请求仍无法正常工作如何解决

问题根因

  • 保存方法调用错误:Mongoose 中只有查询返回的文档实例支持save()方法,直接调用模型Complaint.save()属于非法调用,会直接抛出异常进入catch分支。
  • 错误返回格式错误:catch 块中直接返回Error对象,该对象序列化后默认是空对象,因此你收到的响应为{}。
  • 边界判断缺失:没有校验查询到的投诉记录是否存在,如果传入邮箱没有对应记录,直接赋值属性也会抛出异常。
  • 可选配置缺失:如果你的Express服务没有注册express.json()中间件,无法解析JSON格式的请求体,会导致req.body为空触发报错。

修正后代码

请先确认你的Express实例在注册路由前已经添加了JSON解析中间件:

app.use(express.json())

路由代码修正如下:

router.patch("/updateStatus", async (req, res) => {
  try {
    const {email, complaintStatus} = req.body;
    // 补全参数校验
    if (!email || !complaintStatus) {
      return res.status(400).json({ error: "请填写完整参数" });
    }
    const userData = await Complaint.findOne({ email: email });
    // 校验记录是否存在
    if (!userData) {
      return res.status(404).json({ error: "未找到对应该邮箱的投诉记录" });
    }
    userData.complaintStatus = complaintStatus;
    // 调用文档实例的save方法完成更新
    const result = await userData.save();
    res.status(200).json({message : '更新成功', data: result});
    
  } catch (error) {
    // 错误返回输出可读的错误信息
    res.status(500).json({ error: error.message });
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:15:01