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

Axios请求出现Cannot set headers after they are sent to the client错误如何解决?

错误产生原因
  • 核心触发逻辑:HTTP协议规定单次请求只能对应一次响应,Express 中调用res.json()/res.send()等方法后,就会向客户端发送响应头和响应体,结束本次请求的响应流程,不允许再次修改响应头或发送新的响应内容。
  • 代码问题:getuser接口函数开头就执行了res.status(200).json("hello from code with himanhsu 12315464968 darling"),已经完成响应发送,后续try块中查询用户数据后的res.json(user)、catch块中的报错返回res.json({ message: error.message })都属于尝试第二次发送响应,直接触发Cannot set headers after they are sent to the client报错。
  • 附带的UnhandledPromiseRejectionWarning警告是因为第一次响应发送后,后续数据库查询如果抛出异常,catch块尝试再次发送响应失败抛出的新错误没有被捕获,形成未处理的Promise拒绝。
修复方案

你只需要删除/注释掉接口开头多余的测试响应代码即可,修复后代码如下:

import User from "../model/UserSchema.js"
export const getuser = async (req, res) => {
    // 移除开头多余的响应发送逻辑
    // res.status(200).json("hello from code with himanhsu 12315464968 darling")
    try {
        let user = await User.find()
        res.status(200).json(user)
    } catch (error) {
        res.status(500).json({ message: error.message })
    }
}

如果你需要保留测试内容临时返回,只需在测试响应代码后加return终止后续逻辑执行即可:

res.status(200).json("hello from code with himanhsu 12315464968 darling")
return // 终止后续代码运行,不会触发二次响应

你的前端Axios请求代码没有问题,无需修改。

内容的提问来源于stack exchange,提问作者HIMANSHU KUMAR AMB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:48:00