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

ExpressJS 无效MongoDB ID重定向时报ERR_HTTP_HEADERS_SENT错误如何解决

问题原因

res.redirect()、res.render()、res.end()这类Express响应方法仅负责向客户端返回响应,不会自动中断当前路由函数的执行。你调用重定向方法后没有终止函数运行,后续逻辑会继续尝试操作响应对象,就会触发Error [ERR_HTTP_HEADERS_SENT]报错。

修复方案

在所有发送响应的语句前加return,直接终止函数后续代码执行即可,同时可以删掉冗余的res.end()调用,res.redirect()本身已经会自动结束响应。

修改后的完整代码如下:

router.get("/:id", async (req, res) => {
  if (!mongoose.isValidObjectId(req.params.id)) {
    console.log("Test1")
    return res.redirect("/")
  }
  console.log("Test2")
  try {
    console.log("Test3")
    const post = await Post.findById(req.params.id)
    if (post == null) {
      return res.redirect("/")
    }
    res.render("posts/show", { post: post })
  }
  catch {
    console.log("Test4")
    return res.redirect("posts/index")
  }
})
补充说明
  • 所有需要提前结束路由逻辑的响应场景(重定向、返回错误、返回数据等)都可以用return终止函数执行,避免后续逻辑重复操作响应对象。
  • 如果有多条分支逻辑,确保每条分支的响应语句都正确添加return,避免遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:36:04