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

