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
相关产品推荐
相关产品推荐

