2017-12-02 12 views
1

2日間で問題の解決方法を見つけました。 ウェブサイトからデータ(json)をリクエストします。 彼らはうまく戻り、jsonは有効ですが、データベースに挿入しようとするとほぼ10%が挿入されません。 私は何をすべきか分からず、私も同じ結果を持つPHPを試してみました。 ご協力いただきありがとうございます。NodeJS Jsonデータがデータベースに完全に挿入されていません

これはデータ属性var result = obj.dataを選択した後のjson ouptutです。 pastebin

var request = require("request"); 
 
var fs = require('fs'); 
 
var sleep = require('system-sleep'); 
 

 
var mysql = require('mysql'); 
 
var connection = mysql.createConnection({ 
 
    host: 'localhost', 
 
    user: 'root', 
 
    password: '', 
 
    database: 'feeds', 
 
    timezone: 'Z' 
 
}); 
 

 
request.post({ 
 
    url: "xxx", 
 
    headers: { 
 
     "Content-Type": "application/json" 
 
    }, 
 
    body: '{"xx": "true", "xxx": "true"}' 
 
}, function(error, response, body) { 
 

 
    var obj = JSON.parse(body); 
 
    var result = obj.data; 
 
    console.log(result); 
 
    for (var i = 0; i < result.length; i++) { 
 
     var object = result[i]; 
 
     for (property in object) { 
 
      var value = object[property]; 
 
      var pid, pname; 
 
      if (property == "id") { 
 
       pid = value; 
 
      } 
 
      if (property == "name") { 
 
       pname = value; 
 
      } 
 
      if (property == "xxxxx") {} 
 
      if (property == "xxxxxxxx") { 
 
       connection.query('INSERT INTO tournaments(id, name) VALUES (' + pid + ', "' + pname + '")'); 
 
      } 
 

 
     } 
 
    } 
 

 
});

+0

ここにコメントが挿入されます私はそれが非同期的な行動であるように思えますし、その挿入物の結果を得るという約束が必要です。いずれにしても、結果を得ることができるはずです。取得していないエラーメッセージが表示される可能性があります。 – Peege151

+0

@ Peege151はいその行はデータベースに挿入されます – Tim

+0

それでは、挿入が成功したかどうかをどのように知っていますか?私はMySQLに精通していませんが、理想的にはその操作を行い、挿入の結果を得ることができます。 – Peege151

答えて

0

SOへようこそ。

紛失している可能性があります。あなたは挿入を要求するが、それを放す。 connection.queryは、関数を2番目のパラメータとして許可し、コールバックです。あなたが誤ると行の両方をCONSOLE.LOGすべき

connection.query('INSERT INTO tournaments(id, name) VALUES (' + pid + ', "' + pname + '")', function(err, rows){ 
    console.log('Successful write', rows); 
    console.error('Error! This did not write because: ', err); 
}) 

は、それぞれの時間のためにこれが呼び出されます。それは次のようになりますあなたのために次の行

connection.query('SELECT * FROM some_table', (err, rows) => { 
    // do something with the results here 
}); 

をチェックしてください。おかげで、なぜ結果がDBに書き込まれないのかが分かり、エラーとして表示されます。

+0

これは私が 成功した書き込みOkPacket { FieldCountの得るものです:0、 affectedRows:1、 insertId:86、 serverStatus:2、 WARNINGCOUNT:1、 メッセージ: ''、 protocol41:真、 changedRows: 0} エラー!ヌル 成功した書き込みOkPacket { FieldCountの:0、 affectedRows:1、 insertId:87、 serverStatus:2、 WARNINGCOUNT:1、 メッセージ: ''、 protocol41:真、 changedRowsこれは書いていません:0} エラー!これは次の理由で書きませんでした:null – Tim

+0

この場合、nullはエラーです。それは成功を意味します。行をロギングしないで、ロギングのみを試みてください。それは少しきれいになります。 – Peege151

+0

エラー!これは以下の理由で書き込みしませんでした:null エラー!これは以下の理由で書き込みしませんでした:null エラー!これは以下の理由で書き込みしませんでした:null エラー!これは以下の理由で書き込みしませんでした:null エラー!これは以下の理由で書き込みしませんでした:null エラー!これは以下の理由で書きませんでした:null – Tim

関連する問題