2017-12-02 47 views
1

2天试图找到我的问题的解决方案。 我从网站请求数据(json)。 他们返回罚款和json是有效的,但是当我尝试将他们插入数据库几乎10%不插入。 我不知道该怎么办,我甚至尝试过使用相同的结果。 任何帮助世界表示感谢。NodeJS Json数据没有完全插入到数据库中

这是选择数据属性后的json ouptut var result = obj.data; 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允许一个函数作为它的第二个参数,并且这是一个回调。看看下面的行

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

对你来说会是这个样子:

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); 
}) 

你应该CONSOLE.LOG都犯错而行,每次这样叫。现在你会看到为什么一些结果没有写入数据库,并且它们会显示为错误。

+0

这就是我得到 成功写入OkPacket { 段计数:0, affectedRows:1, insertId:86, serverStatus:2, WARNINGCOUNT:1, 消息: '', protocol41:真实, changedRows: 0} 错误!这并没有因为写:空 成功写入OkPacket { 段计数: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