2017-02-27 20 views
0

私がここで達成しようとしているのは、このJSONを私のデータベースに挿入することです。私のデータベースはSQL Serverを使用しています。私はバルクjsonデータを持っています、それはjsonツリーとして詳細を含んでいます。node.jsに一括JSONデータを挿入するにはどうすればよいですか?

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データである下記、私は

[ 
    { 
     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コードであるにしたいです最初にデータを挿入すると、すべてのデータが挿入されますが、しばらくそれを残すと、もう一度データが挿入されるため、データが重複して重複エラーが発生します。一括データjsonを正しく挿入するにはどうすればよいですか?

+0

面白いランダム使用に実際にあります未定義を返すマップ - –

+0

サイドノート:私たちは2017年に、未加工の値を洞窟人としてSQLに注入せず、準備されたステートメントを使用します。また、データにシングルクォートやその他の特殊文字が含まれていると、スクリプトがランダムにクラッシュするのを防ぐことができます。 –

答えて

0

推測するあなたのコードは実際には約束を実際に使用していないようですが、ランダムにPromise.allが埋め込まれていますが、このコードを有効にすることを約束します!

はまず、約束を使用するように、あなたはexectueSql「promisified」をお勧めします - あなたはそれを持ってたら、残りはPromise.all` `のかなりまっすぐ進む

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); 
    }); 
}; 
関連する問題