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

Node.js操作MongoDB保存数据后如何返回包含新增文档的响应

错误根因

你触发的Cannot set headers after they are sent to the client报错由以下三个逻辑问题导致:

  1. 混用async/await和.then()回调,savedRes在完成赋值前就被传入响应体,存在作用域错误
  2. sendStatus()方法会直接发送完整响应,后续再调用.send()相当于重复返回响应,直接触发头部设置报错
  3. 异步操作未做统一错误捕获,导致未处理的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:57:01