我正在为我的项目使用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和......)
谢谢。
答案 0 :(得分:1)
正如其他人所提到的,HTML表单不支持PUT方法。如果你想坚持使用RESTful路由,那么有一个很棒的中间件叫做Method Override,它就是这样做的。
您所做的只是通过告诉它在查询中查找的字符串来设置中间件:
app.use(methodOverride("_method"));
然后,在您的表单上,执行以下操作:
<form action="/edited/<%=item._id%>?_method=PUT" method="POST" >
这将允许您按原样保留PUT路线。