如何让用户删除帖子?

问题描述:

下面我有一个用户可以发送的发布请求,如果名称为_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

假设快递/连接,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