Javascript 如何使用node.js插入批量JSON数据?
我想在这里实现的是将这个JSON插入到我的数据库中,我的数据库使用sql server。我有大量json数据,其中包含json树的详细信息。下面是我要插入的JSON数据Javascript 如何使用node.js插入批量JSON数据?,javascript,json,node.js,promise,es6-promise,Javascript,Json,Node.js,Promise,Es6 Promise,我想在这里实现的是将这个JSON插入到我的数据库中,我的数据库使用sql server。我有大量json数据,其中包含json树的详细信息。下面是我要插入的JSON数据 [ { No_BPS:'BSWEB12345', Kd_Plg:'MMIM026', Nm_Plg:'YAOMING', Tgl_BPS:'2017-02-27T08:39:38.971Z', Entry_Time:'2017-02-27T08:39:38.971
[
{
No_BPS:'BSWEB12345',
Kd_Plg:'MMIM026',
Nm_Plg:'YAOMING',
Tgl_BPS:'2017-02-27T08:39:38.971Z',
Entry_Time:'2017-02-27T08:39:38.971Z',
User_Name:'tes',
Status:'Y',
Kd_Teknisi:'tes',
No_Ref:'RIRIMIMI609-001',
detailsData:[
{
No_BPS:'BSWEB12345',
Kd_Brg:'RH-C779-SB',
Qty:2,
Alasan:'undefined',
Keterangan:'undefined'
}
]
},
{
No_BPS:'BSWEB99999',
Kd_Plg:'PTPS053',
Nm_Plg:'WARLORD',
Tgl_BPS:'2017-02-27T08:40:04.082Z',
Entry_Time:'2017-02-27T08:40:04.082Z',
User_Name:'tes',
Status:'Y',
Kd_Teknisi:'tes',
No_Ref:'PTKP1210-001',
detailsData:[
{
No_BPS:'BSWEB99999',
Kd_Brg:'PS-230BIT SNI',
Qty:1,
Alasan:'undefined',
Keterangan:'undefined'
},
{
No_BPS:'BSWEB99999',
Kd_Brg:'PS-130BIT SNI',
Qty:1,
Alasan:'undefined',
Keterangan:'undefined'
}
]
}
]
这是我的nodejs代码:
exports.insert_BPS = function(req, resp) {
console.log(req.body);
req.body.map(headerdata=>
{
var sql = `INSERT INTO TblBPSHeader (
No_BPS, Kd_Plg, Tgl_BPS, Entry_Time, User_Name, Status, Kd_Teknisi) values
('` + headerdata.No_BPS + `',
'` + headerdata.Kd_Plg + `',
'` + dateFormat(headerdata.Tgl_BPS, "yyyy-mm-dd' 'HH:MM:ss") + `',
'` + dateFormat(headerdata.Entry_Time, "yyyy-mm-dd' 'HH:MM:ss") + `',
'` + headerdata.User_Name + `',
'` + headerdata.Status + `',
'` + headerdata.Kd_Teknisi + `')`
db.executeSql(sql, function(data, err) {
if (err) {
httpMsgs.show500(req, resp, err);
} else {
// httpMsgs.send200(req, resp);
console.log('header inserted');
};
});
Promise.all(headerdata.detailsData.map
(detaildata =>
{
console.log(detaildata);
var sqldetail = `INSERT INTO TblBPSDetail (
No_BPS, kd_Brg, Qty, Alasan, Keterangan) values
('` + detaildata.No_BPS + `',
'` + detaildata.Kd_Brg + `',
'` + detaildata.Qty + `',
'` + detaildata.Alasan + `',
'` + detaildata.Keterangan + `')`
db.executeSql(sqldetail, function(data, err) {
if (err) {
httpMsgs.show500(req, resp, err);
} else {
// httpMsgs.send200(req, resp);
console.log('detail inserted');
};
});
}
)
)
}
)
};
但是数据是插入的,但它是重复的,它总是循环数据,在第一次插入数据之后,它成功插入了所有数据,但是当我离开它一段时间后,它会再次插入它自己,所以数据会重复并导致重复错误。如何正确插入大容量数据json?猜测您希望承诺使此代码正常工作,尽管您的代码似乎根本没有使用承诺-尽管随机的
承诺。所有的都隐藏在那里
首先,要使用承诺,您需要一个“promisified”exectueSql
——一旦您得到了承诺,其余的实际上是非常简单的
exports.insert_BPS = function(req, resp) {
// a promisified executeSql
let executeSql = (db, sql) => new Promise((resolve, reject) => db.executeSql(sql, (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
}));
return Promise.all(req.body.map(headerdata => {
var sql = `INSERT INTO TblBPSHeader (
No_BPS, Kd_Plg, Tgl_BPS, Entry_Time, User_Name, Status, Kd_Teknisi) values
('` + headerdata.No_BPS + `',
'` + headerdata.Kd_Plg + `',
'` + dateFormat(headerdata.Tgl_BPS, "yyyy-mm-dd' 'HH:MM:ss") + `',
'` + dateFormat(headerdata.Entry_Time, "yyyy-mm-dd' 'HH:MM:ss") + `',
'` + headerdata.User_Name + `',
'` + headerdata.Status + `',
'` + headerdata.Kd_Teknisi + `')`
return executeSql(db, sql)
.then(() => Promise.all(headerdata.detailsData.map(detaildata => {
var sqldetail = `INSERT INTO TblBPSDetail (
No_BPS, kd_Brg, Qty, Alasan, Keterangan) values
('` + detaildata.No_BPS + `',
'` + detaildata.Kd_Brg + `',
'` + detaildata.Qty + `',
'` + detaildata.Alasan + `',
'` + detaildata.Keterangan + `')`
return executeSql(db, sqldetail);
})));
})).then(results => {
// all done here
httpMsgs.send200(req, resp);
}).catch(reason => {
httpMsgs.show500(req, resp, reason);
});
};
有趣的随机使用Promise。所有的都在一个返回未定义的映射上。注意:我们在2017年,不要像穴居人一样将原始值注入SQL,使用准备好的语句。当数据恰好包含单引号和其他特殊字符时,它还可以防止脚本随机崩溃。