【问题标题】:Using POST without a form in jade and node.js?在jade和node.js中使用没有表单的POST?
【发布时间】:2016-12-05 21:21:42
【问题描述】:

我正在尝试为列表中的某些项目创建删除选项。我这样做的方法是给列表中的每个项目一个按钮或某种链接,它将使用 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。我只是在做实验。

我可能会这样做的一种方法是将 id 作为参数包含在 url 中。但这似乎比仅使用 POST 并在请求中包含 id 更令人费解。

【问题讨论】:

  • 你的客户端代码在哪里?
  • @IsmailRBOUH 添加了它。按钮部分不是很相关,因为我不确定是否可以这样做。我只是在做实验。
  • 您是否尝试发送查询参数中的数据?
  • 啊,@notionquest。我刚刚编辑了主要帖子,说这是一种可能性。不管怎么说,多谢拉。但我真的希望能够仅使用 POST 并在请求正文中包含 id 来完成。如果有可能,如果没有,我可能不得不接受你的方式。
  • 我真的不明白你的问题!您要发出 ajax 请求吗?

标签: html node.js mongodb pug


【解决方案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 获取id 值。

【讨论】:

  • 在标题中,没有表格 :D
  • 是的,我正在寻找一种无需表单的方法。但老实说,我忘记了“type="hidden"”。所以我可以试试这个,看看结果如何。感谢您的帮助。
  • POST 数据应使用form 元素发送。否则,您可以使用特定 URL 使用 params 对象发送。
  • 发送 POST 数据时应该使用 name 属性。像这样input(type="hidden", name="id", value=3)
猜你喜欢
  • 2014-10-24
  • 2012-08-07
  • 2015-03-21
  • 1970-01-01
  • 2014-02-25
  • 2013-03-17
  • 2013-12-18
  • 2018-12-25
  • 2011-02-07
相关资源
最近更新 更多