【问题标题】:Getting "Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client" even though I only have one res.render()即使我只有一个 res.render()
【发布时间】:2021-11-08 01:00:37
【问题描述】:

我正在使用 Mongoose 和 Express/Node.js 构建一个简单的 api,但是当我尝试单击“阅读更多”链接(使用 Express 路由参数)时,我得到“错误 [ERR_HTTP_HEADERS_SENT]:无法设置发送到客户端后的标头”。我知道当为单个帖子发送多个回复时会发生这种情况,但我终生无法找到发生这种情况的位置。

我的代码如下:

  Post.find({}, function(err, foundPosts) {
    res.render("home", {homeStartingContent: homeStartingContent, posts: foundPosts});
    res.redirect("/");
  });


})

app.get("/compose", function(req, res) {
  res.render("compose");
})

app.post("/compose", function(req, res) {
  const post = new Post({
    title: req.body.title,
    body: req.body.newPost,
    teaser: req.body.newPost.substring(0,99) + "...",
  });

  // save the post and refresh home page to display most recent post
  post.save(function(err) {
    if(!err) {
      res.redirect("/");
    }
  });
});

// express routing parameters; uses whatever comes after : to decide what to do
app.get("/posts/:postId", function(req, res) {
  const requested = _.lowerCase(req.params.postId);
  Posts.findOne({_id: requested}, function(err, post) {
    res.render("post", {post: post});
  });
});```

I'm pretty sure the issue is in the last app.get("/posts/:postID"...), but I can't figure it out.

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    我了解当一个帖子发送多个回复时会发生这种情况

    当您在已发送响应后发送更多标头时也会发生这种情况。这就是您首先调用res.render 然后在代码sn-p 顶部附近调用res.redirect 所做的。此外,这没有任何意义,因为redirection 会阻止用户阅读您之前rendered 的内容。

    【讨论】:

    • 解决了,谢谢!我以为重定向只会重新加载页面,我没有意识到它会再次发送它。谢谢!
    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2020-10-18
    相关资源
    最近更新 更多