Steam trade bot - TypeError:无法读取属性' 0'未定义的

时间:2016-05-03 17:57:30

标签: mysql sql node.js

所以,我在一个粗糙的地方。我现在正在尝试使用蒸汽机器人,但我遇到了一个我似乎无法解决的问题。

首先,我想说当我使用其他地方托管的数据库时,这是有效的,但是当我使用在localhost上运行的MySQL服务器时,就出现了这个问题。

问题如下:

/home/bot1/node_modules/mysql/lib/protocol/Parser.js:82 throw err; ^ TypeError: Cannot read property '0' of undefined at Query._callback (/home/bot1/bot1.js:711:143) at Query.Sequence.end (/home/bot1/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) at Query.ErrorPacket (/home/bot1/node_modules/mysql/lib/protocol/sequences/Query.js:94:8) at Protocol._parsePacket (/home/bot1/node_modules/mysql/lib/protocol/Protocol.js:271:23) at Parser.write (/home/bot1/node_modules/mysql/lib/protocol/Parser.js:77:12) at Protocol.write (/home/bot1/node_modules/mysql/lib/protocol/Protocol.js:39:16) at Socket. (/home/bot1/node_modules/mysql/lib/Connection.js:96:28) at Socket.emit (events.js:107:17) at readableAddChunk (_stream_readable.js:163:16) at Socket.Readable.push (_stream_readable.js:126:10)

Query回调导致的问题是:

someVar = rows[0].playersCount;

这部分的完整代码是:

mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM game' + current_game, function(err, rows){
    someVar = rows[0].playersCount;
    console.log('Current Players: ' +someVar);
    if(someVar == 2 && items.length > 0 && endtimer==-1) {
        console.log('Found 2 Players');
        endtimer = setTimeout(EndGame,GameTime*1000);
        mysqlConnection.query('UPDATEgamesSETstarttime=UNIX_TIMESTAMP() WHEREid` = \'' + current_game + '\'', function(err, row, fields) {});
    }
});

在这种情况下运行查询SELECT COUNT(DISTINCT userid) AS playersCount FROM game2时,它会返回playersCount 1

我很难看到导致问题的原因,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Cannot read property '0' of undefined的含义是您尝试访问未定义变量的属性“0”。通过查看代码,未定义的变量为rows,这意味着您的查询可能存在一些问题。由于您没有检查回调中的err变量,因此您无法分辨。

这种回调方法的良好做法是首先验证它是否顺利(通过检查是否定义了err)。这将使您更好地了解出错的地方,以及更好地处理错误的代码:

mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM game' + current_game, function(err, rows){
    if (err) {
       // first check if there's an error and mitigate it
       ...
       ...
       return;
    }
    // if we got here, there's no error, so we know rows is defined and can get to work
    someVar = rows[0].playersCount;
    console.log('Current Players: ' +someVar);
    if(someVar == 2 && items.length > 0 && endtimer==-1) {
        console.log('Found 2 Players');
        endtimer = setTimeout(EndGame,GameTime*1000);
        mysqlConnection.query('UPDATEgamesSETstarttime=UNIX_TIMESTAMP() WHEREid` = \'' + current_game + '\'', function(err, row, fields) {});
    }
});