簡體   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