我是nodejs和mysql的新手。我有一个从post获得对象数组,并希望将其插入mysql数据库。如果数据已经存在,则对数据库运行更新查询。问题是Insert查询没有循环整个数组。它只插入Array的最后一项。下面是我的代码:
阵列数据:bukukasData
[{transactionid: '562018965521',
tanggal: '2018-06-05',
kodeakun: 0, item: 'Saldo',
debit: 100000, credit: 0,
saldo: 100000},
{transactionid:'562018595664',
tanggal:'2018-06-05',
kodeakun: 0,
item: 'Test Data',
debit: 0,
credit: 5000,
saldo:95000}]
NodeJS查询
app.post('/api/addbukukas', function(req, res) {
let bukukasData = req.body.bukukasData;
var status = '';
for (var i = 0; i < bukukasData.length; i++) {
var transactionid = req.body.bukukasData[i].transactionid;
var kodeakun = req.body.bukukasData[i].kodeakun;
var item = req.body.bukukasData[i].item;
var debit = req.body.bukukasData[i].debit;
var credit = req.body.bukukasData[i].credit;
var saldo = req.body.bukukasData[i].saldo;
var tanggal = req.body.bukukasData[i].tanggal;
db.query('SELECT COUNT (*) AS rowCount FROM bukukas WHERE transactionid = ?', [req.body.bukukasData[i].transactionid], function(error, result) {
var rows = result[0].rowCount;
if (rows > 0) {
db.query('UPDATE bukukas SET transactionid=?, kodeakun=?, tanggal=?, item=?, debit=?, credit=?, saldo=? WHERE transactionid = ?', [transactionid, kodeakun, tanggal, item, debit, credit, saldo, transactionid],
function(err, result) {
if (err) {
status = 'Update Gagal';
} else {
status = 'Update Success';
}
})
} else {
db.query('INSERT INTO bukukas (transactionid, kodeakun, tanggal, item, debit, credit, saldo) VALUES (?,?,?,?,?,?,?)', [transactionid, kodeakun, tanggal, item, debit, credit, saldo], function(err, insertresult) {
if (err) {
status = 'Insert Gagal';
} else {
status = "insertresult";
}
})
}
})
}
console.log(status);
return res.json({ status: status });
});
使用这段代码,插入到数据库中的唯一数据就是数组中的最后一个数据。如何将Array中的所有数据插入到数据库中?谢谢
发布于 2018-06-05 03:50:31
使用let而不是var。这将避免这个问题。
这个问题的根源是,在JavaScript中,for循环循环遍历变量i
,并启动bukukasData.length
来执行db
查询。该参数仅供参考。由于循环迭代非常快,因此在开始时将i
设置为最后一个值,所有db
-statements都将在i
设置为bukukasData.length
的情况下执行。JavaScript引入了let
来解决这样的问题。使用let
,它将在后台创建变量的副本。
https://stackoverflow.com/questions/50687691
复制相似问题