NodeJS Json Данные не полностью вставляются в базу данных

1

Было 2 дня, пытаясь найти решение моей проблемы. Я запрашиваю данные (json) с веб-сайта. Они возвращают штраф, а json действителен, но когда я пытаюсь вставить их в базу данных, почти 10% не вставлены. Я не знаю, что делать, я даже попробовал php с одинаковыми результатами. Любой мир помощи должен быть благодарен вам.

Это json ouptut после выбора атрибута data 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
    Так что комментарий там, где происходит вставка? Мне кажется, что это будет асинхронное действие, и вам понадобится обещание получить результаты этой вставки. В любом случае, вы должны быть в состоянии получить результат, возможно, есть сообщение об ошибке, которое вы не получаете.
  • 0
    @ Peege151 да, эта строка вставляется в базу данных
Показать ещё 1 комментарий
Теги:

1 ответ

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 как err, так и строки, для каждого вызова. Скорее всего, вы увидите, почему некоторые из результатов не записываются в БД, и они будут отображаться как ошибки.

  • 0
    это то, что я получаю успешно писать OkPacket {fieldCount: 0, disabledRows: 1, insertId: 86, serverStatus: 2, warningCount: 1, message: '', protocol41: true, changeRows: 0} Ошибка! Это не запись, потому что: null Успешная запись OkPacket {fieldCount: 0, disabledRows: 1, insertId: 87, serverStatus: 2, warningCount: 1, message: '', protocol41: true, changeRows: 0} Ошибка! Об этом не писал, потому что: null
  • 0
    Так что в этом случае ноль - это ошибка, и это хорошо. Это означает успех. Попробуйте НЕ регистрировать строки, а только ошибка записи. Это будет немного чище.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню