我有一个用于编辑对象的表单,我想使用带有node.js的express 3.x来正确处理它。
编辑项目路线:/item/edit
显示用于编辑对象的表单。
我想我有三个选择:
1)放置一个隐藏字段,其值为"编辑"所以我可以正确地处理它
这是一个更多的工作,因为我必须在app.post('/item', routes.item.post);
处理它,它也将处理新的创作和更新。
2)仅使用jQuery.ajax()put调用提交编辑表单。
这允许我使用app.put('/item', routes.item.put);
3)将发布请求发送到/ item / edit而不是/ item来处理更新/编辑
帖子只会用于/ item / edit更新:app.post('/item/edit', routes.item.edit.post);
在查看app.js中的代码并遵循CRUD的标准约定时,解决方案#2是唯一直观且明显的解决方案。但是如果由于某种原因未启用javascript,则无法编辑其对象。
答案 0 :(得分:8)
http://www.senchalabs.org/connect/middleware-methodOverride.html
快递:
app.use(express.bodyParser())
app.use(express.methodOverride())
你的html表单:
<form method="POST">
<input type="hidden" name="_method" value="put">
</form>
答案 1 :(得分:1)
对于刚刚遇到此问题的人来说,更新的语法对我有用。当您阅读本文时可能会有所不同,如果这不起作用,请查看method-override instructions。但是method-override 2.3.10
与Express 4.13.4
一起使用时,以下情况应该有效。
<form method="POST" action="/edit-post/<post.id>?_method=PUT">
.....
<button type="submit">Update Post</button>
</form>