2013-02-17 87 views
1

下面我有一個用戶可以發送的發佈請求,如果名稱爲_method的隱藏表單項目被刪除,它將向我自己的服務器發送一個請求到不同的路由並從數據庫中刪除該帖子。這個過程應該如何工作?如何讓用戶刪除帖子?

app.post("/posts/:id/delete", function(req, res){ 
    if(req.body._method = "delete"){ 
    request({ 
     "method": "delete", 
     "url": "/posts/"+req.param.id 
    }, function(err, response, body){ 
     res.redirect("/posts"); 
    }); 
    } 
}); 

app.delete("/posts/:id", function(req, res){ 
    //delete it from the database 
    res.redirect("/posts"); 
}); 
+0

爲什麼不讓用戶的請求成爲HTTP DELETE的請求而不是POST然後重定向? – 2013-02-17 09:25:42

+0

@JohnZwinck http://stackoverflow.com/a/166501 – 2013-02-17 09:55:28

回答

1

假設快遞/連接,methodOverride()可能是最簡單的選擇:

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

雖然,<form action>和路線path應符合:

<form action="/posts/{{id}}" method="post"> 
    <input type="_method" value="delete" /> 
    <!-- ... --> 
</form> 
app.delete('/posts/:id', function (req, res) { 
    //delete it from the database 
    res.redirect("/posts"); 
}); 

[更新]使用Express 4及更新版本,此中間件已移至method-override

+0

沒有線索表示支持這個開箱即用。 – ThomasReggi 2013-02-17 19:27:26