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

Node.js执行updateUser更新用户时报ERR_HTTP_HEADERS_SENT错误

报错根因

你触发ERR_HTTP_HEADERS_SENT错误的核心原因是同时混用了mongoose查询的async/await异步语法和回调函数处理逻辑,同一次请求里两次尝试返回HTTP响应,导致服务端重复设置响应头触发报错。
findOneAndUpdate方法在传入回调函数时会立刻执行回调逻辑返回响应,同时你用await关键字等待该方法的Promise返回,后续逻辑会二次操作响应对象,就触发了该错误。

修复方案

删除回调函数,统一使用async/await语法处理查询结果即可,修正后的代码如下:

module.exports.updateUser = async (req, res) => {
    if (!ObjectId.isValid(req.params.id))
      return res.status(404).send("ID unknown : " + req.params.id);
  
    try {
      // 去掉回调,用变量接收await返回的查询结果
      const updatedUser = await UserModel.findOneAndUpdate(
        { _id: req.params.id },
        {
          $set: {
            bio: req.body.bio,
          },
        },
        { new: true, upsert: true, setDefaultsOnInsert: true }
      );
      // 统一在这里返回响应
      return res.send(updatedUser);
    } catch (err) {
      return res.status(500).json({ message: err });
    }
};

补充说明

  • 如果你偏好使用回调函数处理查询结果,可以去掉await关键字,同时删除外层的try/catch逻辑,所有错误和返回都放在回调内处理即可,两种语法不要混用。
  • 修正后重启服务即可正常更新bio字段并返回更新后的用户文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:07