Node.js中Handlebars URL方法无法正确迭代对象数组ID问题
问题根源:HTML标签未正确闭合!
兄弟,你这问题太典型了——你的Handlebars模板里的<form>标签写错了闭合方式!
看你贴的index.handlebars代码,每个循环里的form结尾写的是<form>而不是</form>:
<form method="POST" action="/{{this.id}}?_method=DELETE"> <button type="submit">DELETE</button> <form> <!-- 这里错了!应该是</form> -->
浏览器在解析HTML时,遇到未正确闭合的标签会自动尝试修复,但这种修复逻辑完全不符合你的预期:它会把第一个<form>标签一直延伸到文档末尾,也就是说页面上所有的删除按钮其实都属于第一个form,所以不管你点哪个按钮,发送的都是第一个form的请求参数,自然只会返回第一个ID的结果。
修复方案
把index.handlebars里的form闭合标签改对就行,修复后的代码:
<ul> {{#each products}} <li>{{this.name}}</li> <form method="POST" action="/{{this.id}}?_method=DELETE"> <button type="submit">DELETE</button> </form> <!-- 这里改成正确的闭合标签 --> {{/each}} </ul>
额外优化建议
你的DELETE路由可以稍微调整下,把参数设为必填(去掉问号),避免无意义的空ID请求:
app.delete('/:id', (req, res, next) => { res.send('your id is: ' + req.params.id); });
这样调整后,每个按钮就会正确绑定对应条目ID的请求啦!
内容的提问来源于stack exchange,提问作者user5640752
相关产品推荐
相关产品推荐

