所以,我的处境很艰难。我目前正在尝试一个蒸汽机器人,但我遇到了一个我自己似乎无法解决的问题。
首先,我想说当我使用托管在其他地方的数据库时,这是有效的,但是当我使用运行在本地主机上的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)
查询回调导致的问题是:
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
我很难看出是什么导致了这个问题,任何帮助都是非常感谢的。
发布于 2016-05-04 05:02:41
行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) {});
}
});
https://stackoverflow.com/questions/37011154
复制相似问题