如何在express和node中从html表单发送put请求

cho*_*ovy 3 node.js express

我有一个用于编辑对象的表单,我想使用带有node.js的express 3.x来正确处理它

编辑项目路径:/item/edit显示用于编辑对象的表单.

我想我有三个选择:

1)放置一个值为"edit"的隐藏字段,这样我就可以正确处理它.这是一个更多的工作,因为我必须处理它,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,则无法编辑其对象.

Jon*_*Ong 9

http://www.senchalabs.org/connect/middleware-methodOverride.html

表达:

app.use(express.bodyParser())
app.use(express.methodOverride())
Run Code Online (Sandbox Code Playgroud)

你的HTML表格:

<form method="POST">
  <input type="hidden" name="_method" value="put">
</form>
Run Code Online (Sandbox Code Playgroud)

  • 我相信这不再有效,请查看 API 文档:https://github.com/expressjs/method-override。我认为您需要将 _action_ 指定为 `/endpoint?_method=put`。 (2认同)

mik*_*eym 5

对于最近遇到此问题的任何人,这里是对我有用的更新语法。当您阅读本文时,情况可能会有所不同,因此如果这不起作用,只需检查方法覆盖说明。但method-override 2.3.10Express 4.13.4以下内容一起使用应该可以。

<form method="POST" action="/edit-post/<post.id>?_method=PUT">
   .....
  <button type="submit">Update Post</button>
</form>
Run Code Online (Sandbox Code Playgroud)