Nodejs - Twitch bot - für jeden viewer einen datenbank eintrag

11/06/2015 18:23 .Barone#1
PHP Code:
client.api({
    
url"http://tmi.twitch.tv/group/user/lirik/chatters"
}, function(errresbody) {
    var 
count JSON.parse(body)["chatter_count"];
    
console.log(count);
    var 
chatter JSON.parse(body)["chatters"]["viewers"];
for(
i=0;chatter.length;i++){
var 
post  = {namechatter[i], points0};
var 
usernamed chatter[i];
var 
checkusercon.query('SELECT * FROM `test` WHERE `name` = ?',chatter[i], function (errorresultsfields) {
console.log(results);
var 
resu results.map( function( el ){
return 
el.name;
});
if(
resu != chatter[i]){
var 
insertusercon.query('INSERT INTO test SET ?'post, function(errresult) {
});
}
});
}
}); 
Hier ist der aktuelle code.
chatter ist ein array mit den aktuellen zuschauern.
Ich möchte das jeder einzelne Zuschauer in die Datenbank eingetragen wird. Jedoch soll, wenn der Zuschauer schon in der Datenbank steht, der Zuschauer übersprungen werden.
Wenn ich das so laufen lasse, wird lediglich der erste Zuschauer eingetragen. D.h wenn es 50 zuschauer sind, wird der erste Zuschauer 50mal eingetragen.
11/08/2015 09:38 .Barone#2
Niemand ne Idee?
11/08/2015 09:59 ComputerBaer#3
Das Problem ist, dass Java nichts mit JavaScript zu tun hat, außer die große (nicht zufällige) Ähnlichkeit der Namen.

Ich habe das Thema mal gemeldet damit es verschoben wird.
11/08/2015 10:21 .Barone#4
:facepalm: ich sehe jetzt erst das ich im javabereich bin. Jup, bitte verschieben.
11/09/2015 16:44 ~De@dly Silence~#5
Ich konnte deinen Code nicht 1:1 übernehmen weil ich nicht weiß welche Module dafür benötigt werden, also hab ich ihn eben in einer für mich benutzbaren Version nachgebaut.
Ich vermute das Problem bei der Asynchronizität der query-Funktion in Zeile 13. Aus diesem Grund habe ich den Code mit async umgebaut. Wenn du mein Beispiel auf deinen Code anwendest sollte alles so funktionier wie du es möchtest.

Code:
// require the necessary modules
var request = require('request');
var http    = require('http');
var mysql   = require('mysql');
var async   = require('async');

// setting up the mysql connection
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  database : 'test'
});


request({
    url: 'http://tmi.twitch.tv/group/user/lirik/chatters',
    json: true
}, function (err, res, body) {

    // only procceed if there are no errors
    if (!err && res.statusCode === 200) {

        // mapping stuff
        var json     = body;
        var chatters = json.chatters.viewers;

        // establishing the mysql connection
        connection.connect();

        // asynchronously accessing all the users
        async.each(chatters, function(user, callback) {

            // look if there is any entry with the current user
            connection.query('SELECT 1 FROM test WHERE name = ? ORDER BY name LIMIT 1;', user, function(err, result, fields) {

                // return early if there are any errors
                if (err) {
                    return callback && callback(err);
                }

                // if it is a new user the result is empty
                if (0 === result.length) {
                    // insert new user
                    connection.query('INSERT INTO test SET ?', {name: user, points: 0}, function(err, result) {
                        // call the callback function (err may or may not be undefined)
                        callback && callback(err);
                    });
                } else {
                    // call the callback function if we already got that user
                    callback && callback();
                }

            });

        }, function(err) {

            // if there are any errors, print them
            if (err) {
                console.log('error: ', err);
            }

            console.log('done');

            // close the mysql connection
            connection.end();

            // exit the process
            process.exit();
        });
    }
});
11/20/2015 17:59 snow#6
#moved…