Nodejs 和 Handlebars - 列表在刷新时复制,而不是刷新
Nodejs and Handlebars - list duplicating on refresh, instead of refreshing
我一直在研究 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>
todos 似乎是一个全局变量,或者在 for 循环范围之外有效。对于每个查询,它都会在待办事项中添加现有的数据库项目。在调用循环之前确保待办事项是一个空列表:
if (err) throw err;
todos = [];
rows.forEach(function(todo) {
todos.push(todo.todo);
console.log(todo.todo)
})
我一直在研究 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>
todos 似乎是一个全局变量,或者在 for 循环范围之外有效。对于每个查询,它都会在待办事项中添加现有的数据库项目。在调用循环之前确保待办事项是一个空列表:
if (err) throw err;
todos = [];
rows.forEach(function(todo) {
todos.push(todo.todo);
console.log(todo.todo)
})