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

Node.js应用POST请求触发ERR_HTTP_HEADERS_SENT错误求助

错误原因与解决方案

错误原因

你的POST路由处理函数存在重复响应问题:

  • 在try块中,成功创建workout后会执行res.status(200).json(workout)发送响应;
  • 在catch块中,创建失败时会执行res.status(400).json({error: error.message})发送响应;
  • 但无论try/catch执行哪个分支,后续的res.json({mssg: 'POST a new workout'})都会再次发送响应。

Express规定每个HTTP请求只能发送一次响应,重复发送就会触发Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client错误。

解决方案

移除try/catch块之后多余的响应语句即可,修改后的POST路由代码如下:

// POST a new workout
router.post('/', async (req,res) => {
    const {title,load,reps} = req.body

    try {
        const workout = await Workout.create({title,load,reps})
        res.status(200).json(workout)
    } catch(error) {
        res.status(400).json({error: error.message})
    }
})

如果需要保留"POST a new workout"的提示,可以将其整合到成功响应中,比如:

// POST a new workout
router.post('/', async (req,res) => {
    const {title,load,reps} = req.body

    try {
        const workout = await Workout.create({title,load,reps})
        res.status(200).json({
            mssg: 'POST a new workout',
            data: workout
        })
    } catch(error) {
        res.status(400).json({error: error.message})
    }
})

内容的提问来源于stack exchange,提问作者Osama Sheha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:01:19