首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Steam trade bot - TypeError:无法读取未定义的属性“0”

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

Stack Overflow用户
提问于 2016-05-04 01:57:30
回答 1查看 897关注 0票数 3

所以,我的处境很艰难。我目前正在尝试一个蒸汽机器人,但我遇到了一个我自己似乎无法解决的问题。

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

问题如下:

代码语言:javascript
运行
复制
/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)

查询回调导致的问题是:

代码语言:javascript
运行
复制
someVar = rows[0].playersCount;

这部分的完整代码是:

代码语言:javascript
运行
复制
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

我很难看出是什么导致了这个问题,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-05-04 05:02:41

Cannot read property '0' of undefined的意思是您正在尝试访问一个未定义变量的属性'0‘。从您的代码可以看出,未定义的变量是rows,这意味着您的查询可能有一些问题。因为在回调中没有检查err变量,所以无法判断。

此类回调方法的良好实践是首先验证它是否运行良好(通过检查是否定义了err )。这将让你更好地理解哪里出了问题,也让你的代码更好地处理错误:

代码语言:javascript
运行
复制
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) {});
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37011154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档