node.js - 如何获得 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"
}
解决方案
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 。它会大大简化您的代码,并且会使其更具可读性。