【问题标题】:Can't set headers after they are sent. in NodeJS using HBS发送后无法设置标题。在 NodeJS 中使用 HBS
【发布时间】:2016-12-25 18:38:58
【问题描述】:

我在尝试渲染页面时收到以下错误

Can't set headers after they are sent.

下面是我想要做的事情

   res.render('information', {
                    name: rows[i].name,
                    boxId: rows[i].box
                });

         console.log(rows[i].name);

它在控制台中打印出正确的信息,所以我知道这是正确的,但是在 information 页面上呈现该信息是一个问题

  {{#each items}}
      <form method="post" action="">
            <input type="hidden"  value="{{BoxId}}">
            <button type="submit">{{name}}</button>
        </form>
  {{/each}}

基本上在该页面上,我正在尝试运行一个 for 循环,其中必须为数据库中找到的每个项目生成一个新的按钮表单。如果有 5 个项目的名称和框值,那么这应该产生 5 次,并设置它们各自的值和名称。

但是,这是次要问题,因为即使执行 &lt;h3&gt; {{name}} &lt;/h3&gt; 也不起作用,并且我遇到了设置标题问题。

任何帮助将不胜感激。 正在使用的模板语言: http://handlebarsjs.com/

【问题讨论】:

  • 您是否在回调中获取行然后渲染模板?
  • 我怀疑错误是由只是调用res.render()引起的。您的路由处理程序或中间件堆栈中可能还有一些其他代码已经在发送响应。你能显示更多的上下文吗?就像rows 的检索方式一样。

标签: javascript node.js templates handlebars.js template-engine


【解决方案1】:

我不确定您是如何进行此设置的,但是 res.render 本身是否处于 for 循环中?如果是这样,将整个数据集传递给模板,并在模板本身中循环,例如:

var data = {
 rows: rows
}
res.render('information', data);

在模板中:

{{#each rows}}
   {{this.propName}}
{{/each}}

如果你有嵌套数据,你也可以嵌套 {{#each}} 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2015-12-20
    • 2016-09-25
    相关资源
    最近更新 更多