首页 > 解决方案 > 如何获得 req.body 的第三个值?

问题描述

我有一个动态表单,它正在输出带有 name+1 的输入。我想从我的表单中获取数据到 MySQL

我尝试添加一个循环,将字段名称增加 1 我尝试 req.body.itemID+1

app.post("/admin/add_challan_db", ensureAuthenticated, function(req, res) {
  var sql =
    "INSERT INTO `invoice`VALUES (DEFAULT,?,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,1,DEFAULT)";
  var sql2 =
    "INSERT INTO `invoice_details`(`id`, `invoice_id`, `item_id`, `qty`, `current_rate`, `total`) VALUES (DEFAULT,?,?,?,?,?)";

  con.query(sql, [req.body.customerid], function(err, result, fields) {
    if (err) console.log(err);
    // console.log(result);
    console.log("Employee Id:- " + result.insertId);
    for (var i = 1; i <= req.body.totalform; i++) {
      con.query(
        sql2,
        [
          req.body.insertId,
          req.body.itemid + i,
          req.body.itemqty + i,
          req.body.itemprice + i,
          (req.body.qty + i) * (req.body.rate + i)
        ],
        function(err, result, fields) {
          if (err) console.log(err);
        }
      );
    }
    // var k = 1;

    /// console.log(req.body[2]);
    res.send(req.body);
  });
});

这是一个req.body外观示例:

{
    "totalform": "2",
    "customerid": "1",
    "itemid1": "2",
    "itemqty1": "3",
    "itemtotal1": "1500",
    "itemprice1": "5",
    "itemid2": "1",
    "itemqty2": "3",
    "itemtotal2": "1500",
    "itemprice2": "5000"
}

标签: node.jsexpressbody-parser

解决方案


Bracket notation当您想要动态访问对象的键时,您应该使用它。例如,如果您想获取密钥item1,您可以这样做:req.body["item" + "1"]. 括号内的内容将首先评估,结果将用作键。

在您的示例中,它看起来像这样:

app.post("/admin/add_challan_db", ensureAuthenticated, function(req, res) {
  var sql =
    "INSERT INTO `invoice`VALUES (DEFAULT,?,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,1,DEFAULT)";
  var sql2 =
    "INSERT INTO `invoice_details`(`id`, `invoice_id`, `item_id`, `qty`, `current_rate`, `total`) VALUES (DEFAULT,?,?,?,?,?)";

  con.query(sql, [req.body.customerid], function(err, result, fields) {
    if (err) console.log(err);
    // console.log(result);
    console.log("Employee Id:- " + result.insertId);
    for (var i = 1; i <= req.body.totalform; i++) {
      var itemid = req.body["itemid" + i];
      var itemqty = req.body["itemqty" + i];
      var itemtotal = req.body["itemtotal" + i];
      var itemprice = req.body["itemprice" + i];
      var qty = req.body["qty" + i];
      var rate = req.body["rate" + i];
      con.query(
        sql2,
        [insertId, itemId, itemQty, itemPrice, qty * rate],
        function(err, result, fields) {
          if (err) console.log(err);
        }
      );
    }
    // var k = 1;

    /// console.log(req.body[2]);
    res.send(req.body);
  });
});

我试图尽可能多地保留您的代码,同时使其更具可读性。请记住,您在系统上使用的某些密钥未包含在req.body您提供的示例中。如果这些值可以未定义,则应添加适当的保护以避免错误。

说了这么多,让我补充一点意见,即使你的方法有效,但当你有一个可变的对象列表时,通常array在 JavaScript 中使用 an 。它会大大简化您的代码,并且会使其更具可读性。


推荐阅读