Steam Trading Bot выпуск - пустая строка

У меня возникла проблема со SteamBot, который я недавно настроил для обработки депозитов и выигрышей на игровом сайте CS:GO. Он хорошо работает для размещения и отправки торговых предложений в течение первых нескольких минут, прежде чем вывести мне эту ошибку:

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)

Я искал везде решение этой проблемы, но не смог ничего найти. Любая помощь или решения будут очень признательны! Я не уверен относительно того, какой фрагмент кода может вызывать проблему, поэтому вот пастбина со всем этим: http://pastebin.com/x9YkhkCX

2 ответа

Исправление это сводится к пониманию того, что идет не так. Как только вы знаете, что не так, вы автоматически знаете, как это должно быть. Вместо того, чтобы сказать, что именно нужно изменить, чтобы исправить это, я надеюсь показать вам, как это выяснить для себя.

Если вы впервые сталкиваетесь с трассировкой стека, вот как это прочитать.

Это начинается так:

C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:82
        throw err;
              ^

"Parser" внутри библиотеки mysql выдает ошибку; это говорит о том, что какой-то SQL-запрос не выполняется. Далее это объясняет ошибку (^):

Error: number format error: empty string

Ошибка в том, что число не отформатировано должным образом, потому что это пустая строка. Это похоже на передачу функции чистому листу бумаги, когда она ожидает, что число будет записано на ней. Но это не так, поэтому он не знает, что делать, и выдает ошибку.

Итак, теперь мы знаем, что происходит не так - на низком уровне. Давайте посмотрим, где это идет не так, чтобы мы знали, почему.

Мы находим это в трассировке стека: вызовы функций, начиная с самого начала программы, до места возникновения ошибки:

    at Error (native)

Эта первая строка говорит, что эта ошибка возникает в функции Error в каком-то месте, называемом "native": где-то в среде выполнения (движок 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)

Здесь мы видим, что число / строка, вероятно, является "идентификатором счета", используемым в модуле stream-tradeoffers. А пока давайте предположим, что в эту функцию передана пустая строка, и в процессе преобразования ее в идентификатор учетной записи она превращается в число. Прежде чем мы захотим отлаживать сторонние модули, давайте сначала посмотрим, не связана ли проблема с основной программой:

    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 мы находим в этой строке:

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)

Исходя из моего опыта, проблема связана с базой данных mysql, настольными играми, идентификатором строки и маркером строки, как показано ниже.

partnerSteamId: row[i].userid

accessToken: row[i].token

PHP-скрипт, который выполняет, выполняет mysql_query и не выполняет его правильно, поэтому он не вводит идентификатор пользователя и токен в базу данных, если другая строка базы данных слишком велика.

Это моя теория.

Другие вопросы по тегам