如何获得 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
。它会大大简化您的代码,并且会使其更具可读性。
我有一个动态表单,它输出名称为 +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
。它会大大简化您的代码,并且会使其更具可读性。