2016-12-12 10 views
0

未定義やその他のエラーのプロパティ「長さ」を読み込めません:例外TypeError:私はCMDでのノードとJSコードを実行しようとするたびに、私はこのエラーを取得する

stackoverflowのはからの許可が必要ですので、ああとボットは、おそらく実行することはできませんmySQLデータベース。

TypeError: Cannot read property 'length' of undefined 
at Query._callback (C:\Users\George\Desktop\bot2\websitebot.js:138:9) 
at Query.Sequence.end (C:\Users\George\node_modules\mysql\lib\protocol\sequences\Sequence.js:86:24) 
at Query.ErrorPacket (C:\Users\George\node_modules\mysql\lib\protocol\sequences\Query.js:94:8) 
at Protocol._parsePacket (C:\Users\George\node_modules\mysql\lib\protocol\Protocol.js:280:23) 
at Parser.write (C:\Users\George\node_modules\mysql\lib\protocol\Parser.js:74:12) 
at Protocol.write (C:\Users\George\node_modules\mysql\lib\protocol\Protocol.js:39:16) 
at Socket.<anonymous> (C:\Users\George\node_modules\mysql\lib\Connection.js:109:28) 
at emitOne (events.js:96:13) 
at Socket.emit (events.js:188:7) 
at readableAddChunk (_stream_readable.js:176:18) 

これは私が実行しようとしているコードです。私は正直なところ、なぜこれらのエラーが出るのかわかりません。包みここで誰かが私を助けるかもしれない:

//The required liberys for the bot to work 
 
var Steam = require('steam') 
 
var SteamUser = require('steam-user'); 
 
var SteamTotp = require('steam-totp'); 
 
var SteamConfirm = require('steamcommunity-mobile-confirmations'); 
 
var SteamTradeOffers = require('steam-tradeoffers'); 
 
var TradeOfferManager = require('steam-tradeoffer-manager'); 
 
var TOTP = require('onceler').TOTP; 
 
var request = require('request'); 
 
var mysql = require('mysql'); 
 
    
 
var offers = new SteamTradeOffers(); 
 
    
 
var apik = 'xxx'; //The API Key of the bot. 
 
var botsteamid = 'xxx'; //The SteamID of the bot. 
 
var identitysecret = 'xxx'; //The identity secret of the bot. 
 
var sharedsecret = 'xxx'; //The shared secret of the bot 
 
    
 
    
 
var botusername = 'xxx'; 
 
var botpassword = 'xxx'; 
 
    
 
var admin = 'xxx'; //The steamid of the Admin. 
 
var botid = 'xxx'; //The ID of the bot.. 
 
    
 
var pooling_interval = 10000; // 10 seconds by default, the bot checks for outgoing confirmations every X seconds, defined here 
 
    
 
//Setting up device identity 
 
var deviceid=SteamTotp.getDeviceID(botsteamid); 
 
    
 
    
 
//Making the bot log in. 
 
var details = { 
 
    "accountName" : botusername, // Bot username 
 
    "password"  : botpassword, // Bot password 
 
    "twoFactorCode" : SteamTotp.generateAuthCode(sharedsecret) 
 
}; 
 
    
 
var client = new SteamUser(); 
 
    
 
var manager = new TradeOfferManager({ 
 
    "steam" : client, 
 
    "domain" : "localhost", //localhost 
 
    "language" : "en", 
 
}) 
 
    
 
//Setting up the MySQL Connection - This is where I have errors. 
 
var connection = mysql.createConnection({ 
 
    host  : 'xxx', // MYSQL , LEAVE IT AS LOCALHOST IF YOU RUN IT ON THE SAME SERVER AS THE WEBSITE AND DATABASE 
 
    user  : 'xxx', // MYSQL USERNAME 
 
    password : 'xxx', // MYSQL PASSWORD 
 
    database : 'xxx', // MYSQL DATABASENAME 
 
    charset : 'utf8_general_ci' 
 
}); 
 
    
 
connection.connect(); 
 
    
 
client.logOn(details); 
 
    
 
    
 
//Checking mobile confirmations 
 
function checkConfirmations(steamcommunityMobileConfirmations){ 
 
    steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations) 
 
     { 
 
      if (err) 
 
      { 
 
       console.log('Confirmations error: '+err); 
 
       if(err=='Error: 503') // This is an error you can most likely ignore, except if it's spammed a lot - To fix it simply restart the bot 
 
       { 
 
        
 
       } 
 
       if(err=='Error: Invalid protocol: steammobile:') // - To fix it simply restart the bot 
 
       { 
 
        // A fix should be coming soon! 
 
       } 
 
       return; 
 
      } 
 
      if(confirmations.length>0) 
 
      { 
 
       console.log('[SERVER] Received ' + confirmations.length + ' confirmations'); 
 
      } 
 
      if (! confirmations.length) 
 
      { 
 
       return; 
 
      } 
 
      steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result) 
 
      { 
 
       if (err) 
 
       { 
 
        console.log(err); 
 
        return; 
 
       } 
 
       console.log('[SERVER] Confirmation handling result: ' + result); 
 
      }).bind(this)); 
 
     }).bind(this)); 
 
} 
 
    
 
//Done with the functions, time to do commands. 
 
    
 
//Logging the bot in 
 
client.on('loggedOn', function(details) 
 
{ 
 
    client.on('webSession', function(sessionID, cookies){ 
 
     manager.setCookies(cookies, function(err) { 
 
     if(err) { 
 
      console.log('setCookies error: '+err); 
 
      process.exit(1); // Fatal error since we couldn't get our API key 
 
      return; 
 
     } 
 
     var steamapi=manager.apiKey; 
 
     var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations'); 
 
     var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
 
     { 
 
      steamid:   botsteamid, 
 
      identity_secret: identitysecret, 
 
      device_id:  deviceid, 
 
      webCookie:  cookies, 
 
     }); 
 
     setInterval(function(){ 
 
      checkConfirmations(steamcommunityMobileConfirmations) 
 
     }, pooling_interval); 
 
     console.log("[SERVER] The Bot has logged in!"); 
 
     client.addFriend(admin); 
 
     client.setPersona(Steam.EPersonaState.LookingToTrade); 
 
     }); 
 
     
 
     offers.setup({ 
 
    sessionID: sessionID, 
 
    webCookie: cookies, 
 
    APIKey: apik 
 
}); 
 
    
 
    }); 
 
}); 
 
    
 
function checkWithdraw(){ 
 
connection.query("SELECT * FROM `withdraw` WHERE active=1 AND `botid`='"+botid+"' AND tradestatus='Queued' LIMIT 1", function(err, row, fields) { 
 
if (!row.length) {             
 
    return; 
 
} 
 
var tradeid = row[0].id; 
 
    
 
var sendItems = (row[0].assetids).split(','); 
 
var item=[],num = 0; 
 
for (i = 0; i < sendItems.length; i++) { 
 
    item[num] = { 
 
     appid: 730, 
 
     contextid: 2, 
 
     amount: 1, 
 
     assetid: sendItems[i] 
 
    } 
 
num++; 
 
} 
 
    offers.makeOffer ({ 
 
     partnerSteamId: row[0].steamid, 
 
     accessToken: row[0].token, 
 
     itemsFromMe: item, 
 
     itemsFromThem: [], 
 
     message: 'Withdraw from ' 
 
     
 
     }, 
 
     function(err, response) { 
 
     if (err) { 
 
     console.log(err); 
 
      return; 
 
     } 
 
     console.log('Tradeoffer sent to ' + row[0].steamid); 
 
     tradeofferquery = response; 
 
     tradeofferid = (tradeofferquery['tradeofferid']); 
 
     connection.query('UPDATE `withdraw` SET `tradeid`=\''+tradeofferid+'\', `tradestatus`="Sent" WHERE `id`=\''+tradeid+'\'', function(err, row, fields) {}); 
 
     }) 
 
     
 
}); 
 
} 
 
    
 
function checkDeposit(){ 
 
connection.query("SELECT * FROM `deposits` WHERE `credited`=\'0\' AND `tradestatus`=\'Queued\' AND `botid`='"+botid+"' LIMIT 1", function(err, row, fields) { 
 
if (!row.length) {             
 
    return 
 
} 
 
    
 
offers.getHoldDuration({partnerSteamId: row[0].steamid, accessToken: row[0].token}, function(err, response) 
 
{ 
 
    if (err) 
 
    { 
 
     return; 
 
    } 
 
    escrowduration = response; 
 
    thesd = (escrowduration['their']); 
 
    if(thesd === 0){ 
 
     
 
    
 
var tradeid = row[0].id; 
 
    
 
var sendItems = (row[0].assetids).split(','); 
 
var item=[],num = 0; 
 
for (i = 0; i < sendItems.length; i++) { 
 
    item[num] = { 
 
     appid: 730, 
 
     contextid: 2, 
 
     amount: 1, 
 
     assetid: sendItems[i] 
 
    } 
 
num++; 
 
} 
 
console.log(item); 
 
    offers.makeOffer ({ 
 
     partnerSteamId: row[0].steamid, 
 
     accessToken: row[0].token, 
 
     itemsFromMe: [], 
 
     itemsFromThem: item, 
 
     message: 'Deposit to , code: ' + row[0].code 
 
     }, function(err, response) { 
 
     if (err) { 
 
      console.log(err); 
 
      return; 
 
     } 
 
     console.log('Tradeoffer sent to ' + row[0].steamid); 
 
     tradeofferquery = response; 
 
     tradeofferid = (tradeofferquery['tradeofferid']); 
 
     connection.query('UPDATE `deposits` SET `tradeid`=\''+tradeofferid+'\', `tradestatus`="Sent" WHERE `id`=\''+tradeid+'\'', function(err, row, fields) {}); 
 
     }) 
 
    
 
    } else { 
 
     connection.query('DELETE FROM `deposits` WHERE `steamid`=\''+ row[0].steamid +'\'', function(err, row, fields) {}); 
 
     console.log('They are in escrow'); 
 
    }  
 
}); 
 
    
 
}); 
 
    
 
} 
 
    
 
//Keeping track of sent offers. 
 
manager.on('sentOfferChanged', function(offer, oldState) { 
 
    console.log("Offer #" + offer.id + " changed: " + TradeOfferManager.getStateName(oldState) + " -> " + TradeOfferManager.getStateName(offer.state)); 
 
    connection.query('UPDATE `deposits` SET `tradestatus`=\''+TradeOfferManager.getStateName(offer.state)+'\' WHERE `tradeid`=\''+offer.id+'\''); 
 
    connection.query('UPDATE `withdraw` SET `tradestatus`=\''+TradeOfferManager.getStateName(offer.state)+'\' WHERE `tradeid`=\''+offer.id+'\''); 
 
    if(offer.state == TradeOfferManager.ETradeOfferState.Accepted) { 
 
    offer.getReceivedItems(function(err, items) { 
 
      if(err) { 
 
       console.log("Couldn't get received items: " + err); 
 
      } else { 
 
       
 
      items.forEach(function(item) 
 
     { 
 
      console.log('Recieved: ' + item.name); 
 
      connection.query('INSERT INTO `bank` (`botid`,`assetid`,`img`,`name`,`status`) VALUES (\''+botid+'\',\''+item.assetid+'\',\''+item.icon_url+'\',\''+item.market_name+'\',\'1\')', function(err, row, fields) {}); 
 
     
 
     }) 
 
     
 
      } 
 
     }); 
 
    } 
 
    if(offer.state != (TradeOfferManager.ETradeOfferState.Accepted || TradeOfferManager.ETradeOfferState.Active)) { 
 
    connection.query('DELETE FROM `deposits` WHERE `tradeid`=\''+offer.id+'\''); 
 
    connection.query('DELETE FROM `withdraw` WHERE `tradeid`=\''+offer.id+'\''); 
 
    } 
 
}); 
 
    
 
    
 
    
 
    
 
//Processing incomming offers 
 
manager.on('newOffer', function(offer) 
 
{ 
 
    offer.decline(function(err) 
 
      { 
 
       console.log('[DEBUG] Declined Counter offer.'); 
 
       if (err) 
 
       { 
 
        console.log('Decline error: '+err); 
 
       } 
 
       connection.query('DELETE FROM `deposits` WHERE `tradeid`=\''+offer.id+'\''); 
 
       connection.query('DELETE FROM `withdraw` WHERE `tradeid`=\''+offer.id+'\''); 
 
      
 
      }); 
 
}); 
 
    
 
setInterval(function() { 
 
    checkDeposit(); 
 
    checkWithdraw(); 
 
}, 5000); 
 
    
 
//Numeric and float 
 
function is_float(mixed_var) 
 
{ 
 
    
 
    return +mixed_var === mixed_var && (!isFinite(mixed_var) || !! (mixed_var % 1)); 
 
} 
 
    
 
function isNumeric(n){ 
 
    return (typeof n == "number" && !isNaN(n)); 
 
} 
 
    
 
//Setting up chat commands for the admin 
 
client.on('friendMessage#'+admin+'', function(steamID, message) 
 
{ 
 
    
 
    console.log("[SERVER] Admin to Bot: " + message); 
 
    if((message.indexOf("ping") == 0) || (message.indexOf("/cmd") == 0)) 
 
    { 
 
     checkDeposit(); 
 
     client.chatMessage(admin, 'Pong!'); 
 
    } 
 
    if((message.indexOf("pong") == 0) || (message.indexOf("/cmd") == 0)) 
 
    { 
 
     checkWithdraw(); 
 
     client.chatMessage(admin, 'Pong!'); 
 
    } 
 
    if(message.indexOf("/code") == 0) 
 
    { 
 
     var code = SteamTotp.generateAuthCode(sharedsecret); 
 
     client.chatMessage(admin, '[SERVER] Your login code: '+code+''); 
 
    } 
 
    
 
});

答えて

0

私はあなたの質問をunderstod場合は、エラーが発生した場所の右これがあります。

新しすぎるの
connection.query("SELECT * FROM `withdraw` WHERE active=1 AND `botid`='"+botid+"' AND tradestatus='Queued' LIMIT 1", function(err, row, fields) { 
if (!row.length) {             
    return; 
} 

イムの種類MySQLの面積が、私は、代わりにこのようなコードに何かを書いてみるwhould:何IVEは行わことは、あなたの入力に「BOTID」の場所を変更した

connection.query("SELECT * FROM `withdraw` WHERE active=1 AND `botid`= ? AND tradestatus='Queued' LIMIT 1",botid , function(err, rows, fields) { 
if (!rows.length) {             
    return; 
} 

「?」その代わりに、あなたの関数の直前でbotidから値を受け取り、行はコードクリアランスのための行になります。

あなたが言ったように、あなたのDBにアクセスできませんが、これはうまくいくと思います。お知らせ下さい!

+0

助けてくれてありがとうございますが、それは動作しないようです。 –

+0

まだ普通です:TypeError:未定義の 'length'プロパティを読み取ることができません –

関連する問題