我遇到了SteamBot的问题,我最近设立了一个CS:GO Gambling网站处理存款和奖金的问题。在向我提出这个错误之前,它适用于在前几分钟存入和发送交易报价:
C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:82
throw err;
^
Error: number format error: empty string
at Error (native)
at Function.Long.fromString (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\node_modules\long\dist\Long.js:180:19)
at toAccountId (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:376:15)
at SteamTradeOffers.makeOffer (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:396:42)
at Query._callback (C:\Users\Frederik\Desktop\bot\sell.js:160:13)
at Query.Sequence.end (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:96:24)
at Query._handleFinalResultPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:144:8)
at Query.EofPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:128:8)
at Protocol._parsePacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Protocol.js:271:23)
at Parser.write (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:77:12)
我到处寻找解决方案,但是没有设法找到任何东西。任何帮助或解决方案将非常感谢!我不确定可能导致问题的代码段,所以这里有一个包含大量代码的pastebin:http://pastebin.com/x9YkhkCX
答案 0 :(得分:0)
修复它归结为理解出了什么问题。一旦你知道什么是错的,你就会自动知道应该是什么样的。 我希望能告诉你如何找到适合自己的东西,而不是准确地说明需要改变什么。
如果这是您第一次遇到堆栈跟踪,请阅读以下内容。
它是这样开始的:
C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:82
throw err;
^
mysql库中的'Parser'会抛出错误;这告诉你一些SQL查询失败。
接下来继续解释错误(^
):
Error: number format error: empty string
错误是数字格式不正确,因为它是一个空字符串。这就像把一个功能写成一张空白的纸片,当它想要一个数字写在它上面时。但它不是,因此它不知道该怎么做,并引发错误。
所以现在我们知道出了什么问题 - 处于低水平。让我们看看哪里它出错了,以便我们知道为什么。
我们在stacktrace中找到了这个:函数调用,从程序的开头一直到引发错误的地方:
at Error (native)
第一行说这个错误在一个名为'native'的地方的Error函数中出现:执行环境中的某个地方(javascript引擎),而不是正在执行的程序中。 这并没有给我们任何新的背景 - 我们知道已经出现了错误。
at Function.Long.fromString (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\node_modules\long\dist\Long.js:180:19)
在这里,我们得到一些与数字相关的东西:它似乎是一个将字符串转换为Long
的函数,这是一种大数字。此处也没有太多新闻,因为错误消息已经告诉我们empty string
。但至少我们走在正确的轨道上。
at toAccountId (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:376:15)
在这里,我们看到数字/字符串可能是'account id',在stream-tradeoffers模块中使用。现在让我们假设将空字符串传递给此函数,并在将其转换为帐户ID的过程中将其转换为数字。在我们想要调试第三方模块之前,先看看主程序中是否存在问题:
at SteamTradeOffers.makeOffer (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:396:42)
图书馆,接着是:
at Query._callback (C:\Users\Frederik\Desktop\bot\sell.js:160:13)
在OP pastebin中,我们在该行找到了:
offers.makeOffer ({
partnerSteamId: row[i].userid,
itemsFromMe: item,
accessToken: row[i].token,
itemsFromThem: [],
message: 'Congratulations! You won a game on '+sitename+'. Your game ID is #'+gamenum
}, function(err,response){....
在这里,我们找到对makeOffer
的调用,以及使用的参数。它们中的一个可能是空字符串,或者是具有由makeOffer
方法读取的空字符串属性的对象;为了找到答案,我们必须检查前两个堆栈跟踪行中提到的文件。
为了节省时间,我们不需要查看堆栈跟踪的其余部分,因为从这里开始它只引用mysql
库,并且问题不大可能存在:
at Query.Sequence.end (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:96:24)
at Query._handleFinalResultPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:144:8)
at Query.EofPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:128:8)
at Protocol._parsePacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Protocol.js:271:23)
at Parser.write (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:77:12)
答案 1 :(得分:0)
根据我的经验,问题来自mysql数据库,桌面游戏和行userid和row token如下所示。
partnerSteamId: row[i].userid
accessToken: row[i].token
执行的PHP脚本执行mysql_query并不正确执行它,因此它不会输入任何用户ID和&如果另一个数据库行太大,则在数据库中使用令牌。
这是我的理论。