Node.js操作MongoDB保存数据后如何返回包含新增文档的响应
错误根因
你触发的Cannot set headers after they are sent to the client报错由以下三个逻辑问题导致:
- 混用
async/await和.then()回调,savedRes在完成赋值前就被传入响应体,存在作用域错误 sendStatus()方法会直接发送完整响应,后续再调用.send()相当于重复返回响应,直接触发头部设置报错- 异步操作未做统一错误捕获,导致未处理的Promise拒绝抛出
修正后代码
仅需要调整save方法逻辑即可:
async save(req, res){ try { const {score, multiplier, level} = req.body; const scores = new Result({score, multiplier, level}); // 直接await获取保存后的文档结果 const savedRes = await scores.save(); // 仅用status设置状态码,再send自定义响应体 return res.status(200).send({ message:'新记录已保存', data: savedRes }) } catch(error) { // 错误逻辑也统一用try/catch处理 return res.status(500).send(error) } }
补充说明
sendStatus(状态码)是status(状态码).send(状态码对应默认文本)的语法糖,调用后就已经结束本次请求的响应。如果需要自定义返回内容,只需调用status()设置状态码,再通过send()/json()传递自定义响应内容即可。
内容的提问来源于stack exchange,提问作者Janvier
相关产品推荐
相关产品推荐

