Express.JS中渲染Jade模板后如何返回?

发布于 2024-11-27 07:44:19 字数 491 浏览 1 评论 0原文

请考虑简单的express.js 路由:

app.get("/test", function(req, res) {
   if(condition1) {
      res.render("foo", {
          title : "Test"
      });
   }

   console.log("HERE");

   if(condition2) {
      res.render("bar", {
          title : "Test2"
      });
   }
});

现在,在这个人为的示例中,有时条件1 为真,有时条件2 为真。但是,在条件 1 为 true 的情况下,控件会通过并打印出 console.log 行,然后在遇到其他渲染时失败:

错误:发送后无法设置标头。

就像需要结束响应什么的,但我已经尝试过,但无济于事。任何帮助将不胜感激。谢谢。

Please consider the simple express.js route:

app.get("/test", function(req, res) {
   if(condition1) {
      res.render("foo", {
          title : "Test"
      });
   }

   console.log("HERE");

   if(condition2) {
      res.render("bar", {
          title : "Test2"
      });
   }
});

Now, in this contrived example, sometimes condition1 will be true, and other times, condition2. However, in the case that condition1 is true, the control passes through and prints out the console.log line and then fails when it hits the other render with:

Error: Can't set headers after they are sent.

It's like the response needs to be ended or something, but I've tried that, to no avail. Any help would be appreciated. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜灵血窟げ 2024-12-04 07:44:19

我只是使用return res.render()

当你说它不起作用时,这很奇怪,因为 return 实际上应该阻止函数的其余部分执行。

I just use return res.render().

It's strange when you say it doesn't work, because return really should stop the rest of the function from executing.

勿忘初心 2024-12-04 07:44:19

只需使用 else,这样就只有一个代码路径通向 res. res.send 已结束响应,但您正尝试使用另一个 res.render 发送另一个响应

只需将第二个 if 更改为 else if,并移动代码以实现此目的,即将 console.log 移至所有条件之上。

或者,我相信您可以在 res.render 之后放置一个 return 语句。

Simply use an else, so that only one code path leads to a res. res.send already ends a response, but you are trying to send another response with another res.render

Simple change the second if to an else if, and move around the code to allow for this, ie move the console.log above all the conditionals.

Or, I believe you can just place a return statement after the res.render.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文