Node.js和Handlebars-列表在刷新时重复,而不是刷新

时间:2018-11-30 14:37:00

标签: node.js express handlebars.js express-handlebars

我一直在玩把手模板。当前的做法是一个简单的待办事项清单。初次加载就可以了,但是如果刷新页面,则实际上不会刷新。相反,它将复制我的GET结果并将其附加到列表中。

所以,列表第一次是这样的:

  • 买杂货
  • 带孩子去踢足球

然后刷新,我得到:

  • 买杂货
  • 带孩子去踢足球
  • 买杂货
  • 带孩子去踢足球

index.js GET方法

app.get('/', (req, res) => {
  let query = "select * from todos";
  db.query(query, function(err, rows) {
    if (err) throw err;
    rows.forEach(function(todo) {
      todos.push(todo.todo);
      console.log(todo.todo)
    })
    res.render('index', {
      todos
    });
  })
});

index.hbs

<h2>Here's some Todos</h2>
<ul id="list">
{{#each todos}}
  <li>{{this}}</li>
{{/each}}
</ul>

1 个答案:

答案 0 :(得分:1)

似乎todos是一个全局变量,或者在for循环范围之外有效。对于每个查询,它在todos中添加现有的数据库项目。在调用循环之前,请确保待办事项是一个空列表:

if (err) throw err;
todos = [];
rows.forEach(function(todo) {
    todos.push(todo.todo);
    console.log(todo.todo)
})