2016-07-31 56 views
0

我想为列表中的某些项目创建一个删除选项。我这样做的方式是给列表中的每个项目一个按钮或某种使用POST发送_id(来自mongodb)的链接。正如你可以在下面的代码(req.body.id)中看到的,我试图从请求中获取id。但是,该请求没有该id,因为我不知道如何在不使用表单和输入字段的情况下执行此操作。在jade和node.js中使用没有表单的POST?

我见过一些方法可以在PHP中使用javascript来实现。但有没有更多的玉器和node.js具体的方式?

router.post("/deleteitem", function(req,res) { 
    var db = req.db; 
    var collection = db.get("itemcollection"); 
    id = req.body.id; 

    collection.remove({ 
    "_id": id 
    }, function (err, removed) { 
    if (err) { 
     res.send("Error"); 
    } 
    else { 
     res.redirect("editlist"); 
    } 
    }); 
}); 

感谢您的帮助。

编辑:

客户端:

extends layout 

block content 
    h1. 
     Items 
    ul 
     each item, i in editlist 
      li 
       p #{item.name} costs #{item.price} 
       button#btnSubmit(type="button",method="post",action="/deleteitem") Delete 

    a(href="/") Back to start 

按键部分是不是很相关,但。首先,我不确定是否可以这样做。其次,我没有以任何方式包含这个id。我只是在试验。

我可能做到这一点的一种方法是将url包含在参数中。但是这似乎比使用POST和在请求中包含id更复杂一些。

+0

你的客户端代码在哪里? –

+0

@IsmailRBOUH添加了它。按钮部分虽然不是很相关,因为我不确定可以这样做。我只是在试验。 – Smebbs

+0

您是否尝试过在查询参数中发送数据? – notionquest

回答

1

您需要使用html表单将POST数据公开到req.body对象,即使这只是带有一些隐藏数据的按钮的形状。您可以使用input元素与表单内的button元素一起执行此操作。

extends layout 

block content 
    h1. 
     Items 
    ul 
     each item, i in editlist 
      li 
       p #{item.name} costs #{item.price} 
       form(action="/deleteitem",method="post") 
        input(type="hidden",id="id",value="#{item.id}") 
        button#btnSubmit(type="button") Delete 

    a(href="/") Back to start 

此代码假定每个item具有id属性。

使用此按钮,您可以通过req.body.id获得的价值。

+0

在标题中,**没有表格**:D –

+0

是的,我正在寻找一种无窗体的方式。但说实话,我已经忘记了“type =”hidden“”。所以我可以尝试一下,看看它是如何摆脱的。谢谢您的帮助。 – Smebbs

+0

'POST'数据应该使用'form'元素发送。否则,您可以使用特定的URL使用'params'对象发送。 – roflmyeggo