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

Node.js Express中ERR_HTTP_HEADERS_SENT错误:是否与async函数有关?

Express路由报错ERR_HTTP_HEADERS_SENT的原因及修复

这个错误不是async函数导致的,问题出在你处理响应的写法上:

错误根源

你在多处用了res.sendStatus(401).send(...)这种写法——sendStatus()方法会直接发送对应的HTTP状态码、默认响应体,并且结束整个响应流程。之后再调用.send(),就会试图再次修改响应头或发送内容,触发“重复发送响应”的错误。

修复方法

把所有res.sendStatus(xxx).send(...)改成以下二选一的写法:

  • 如果需要自定义响应体,用res.status(401).send({message: "unauthenticated"})
  • 如果不需要响应体,直接用res.sendStatus(401)

另外补充一个小优化:userf.toJSON()是同步方法,不需要加await,去掉即可。

修正后的完整代码:

router.get("/user", async (req, res) => {
    console.log("user hit")
    try {
        const cook = req.cookies["jwt"]
        
        if(cook == null){
            return res.status(401).send({
                message: "unauthenticated"
            })
        }

        const claims = jwt.verify(cook, "secret")

        if (!claims) {
            return res.status(401).send({
                message: "unauthenticated"
            })
        };
        const userf = await LoginCred.findOne({ _id: claims._id });
        const { password, ...data } = userf.toJSON();
        return res.send(data)

    } catch (err) {
        console.log(err)
        return res.status(401).send({
            message: "unauthenticated"
        });
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:32:32