Express PUT和DELETE方法不起作用

时间:2017-02-26 17:38:55

标签: node.js express

我正在为我的项目使用express。自从项目乞讨以来,我没有遵循创建REASTFUL api的规则。现在我正在尝试使用PUT方法更新我的字段并且express正在发送404消息(无法获取...)。这发生在我的DELETE方法中太。 这是我的视图页面代码,用于更新:

<form action="/edited/<%= resul[0].name %>" method="PUT">
    <label class="label">Name</label>
        <input class="input" type="text" name="name" " value="<%= resul[0].name %>">
    <label class="label">description</label>
        <input class="input" type="text" name="desc" value="<%= resul[0].desc %>">
        <button type="submit">DONE</button>
</form>

这里是明确的部分(顺便说一句,我正在使用Rethinkdb):

app.put("/edited/:name", function(req , res){
r.table('words').filter({name: req.params.name}).update([
{ name: req.body.name, desc:'some update on description'}
]).run().then(function(result,err){
          if(err) throw err;
          res.send('edited correcly');  
         });
});

当我尝试更新某些内容时,uri更改为:
http://localhost:3000/edited/test?name=changedtest&desc=something
错误显示:
Cannot GET /edited?name=changedtest&desc=something
DELETE也是如此 令人惊讶的是,当我用GET方法实现删除工作时。

这是怎么回事?怎么解决这个?
我们是否必须使用精确指定的http方法来执行特定任务?(例如总是删除DELETE和......)
谢谢。

1 个答案:

答案 0 :(得分:1)

正如其他人所提到的,HTML表单不支持PUT方法。如果你想坚持使用RESTful路由,那么有一个很棒的中间件叫做Method Override,它就是这样做的。

您所做的只是通过告诉它在查询中查找的字符串来设置中间件:

app.use(methodOverride("_method"));

然后,在您的表单上,执行以下操作:

<form action="/edited/<%=item._id%>?_method=PUT" method="POST" >

这将允许您按原样保留PUT路线。