如何获得 req.body 的第三个值?

how to get the 3rd value of req.body?

我有一个动态表单,它输出名称为 +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"
}
  for(var i = 1 ;i<= req.body.totalform ; i++)
    {
     var itemid = 'itemid'+i;
     var itemqty = 'itemqty'+i;
     var itemprice = 'itemprice'+i;
     var itemtotal = 'itemtotal'+i;
     con.query(sql2, [result.insertId,req.body[itemid],req.body[itemqty],req.body[itemprice],(req.body[itemqty])*(req.body[itemprice])], function (err, result, fields) {
       if (err) console.log(err);

      });
    }

当您想要动态访问对象的键时,您应该使用 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 中。如果这些值可以未定义,则应添加适当的保护以避免错误。

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