在jade和node.js中使用没有表单的POST?

时间:2016-07-31 20:03:28

标签: html node.js mongodb pug

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

我已经在PHP中看到了使用javascript进行某些操作的方法。但是有更多的jade和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中的id作为参数包含在内。但这似乎比仅使用POST并在请求中包含id更复杂。

1 个答案:

答案 0 :(得分: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属性。

通过此功能,您可以在使用该按钮提交的下一条路线中通过id获取req.body.id值。