繁体   English   中英

快速PUT和DELETE方法不起作用

[英]Express PUT and DELETE method not working

我正在为项目使用Express。 自从请求项目以来,我没有遵循创建REASTFUL api的规则。现在我正尝试使用PUT方法更新字段并表达发送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进行删除和...)
谢谢。

就像其他人提到的那样,HTML表单不支持PUT方法。 如果您要坚持使用RESTful路由,那么有个很棒的中间件叫做Method Override,它可以做到这一点。

您要做的就是通过告诉中间件在查询中寻找什么字符串来设置中间件:

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

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

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

这将使您保持原样放置PUT路线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM