2012-03-06 10 views
2

私は使用しています:ノード - mysqlnode-mysqlは複数のクエリを処理できませんか?

arrtickersは約200の値を持っています。

arrtickersクロージャが値をsymに渡します。

SYMは、ここでの問題は、MySQLで

(各fnが完了する前のFNを待たずに独自に実行を開始します、非同期モードで実行されている)各関数に値を渡します複数のコールを処理することができないようですか?以下は

events.js:48 
     throw arguments[1]; // Unhandled 'error' event 
        ^
Error: reconnection attempt failed before connection was fully set up 
    at Socket.<anonymous> (/home/ubuntu/node/node_modules/mysql/lib/client.js:67:28) 
    at Socket.emit (events.js:64:17) 
    at TCP.onread (net.js:398:51) 


     arrtickers.forEach(function(value) { 

      var sym= value; 


      (function(sym) { 

        url2= "http://test2.com/quote.ashx?t="+sym+"&ty=c&ta=1&p=d&b=1"; 

        request({ uri:url2 }, function (error, response, body) { 

         jsdom.env({ 
         html: body, 
         scripts: [ 
          jqlib 
         ] 
         }, function (err, window) { 

         var $ = window.jQuery; 
         var data= $('body').html(); 
         //some scrapping 

         var client2 = mysql.createClient({ 
          user: 'root', 
          password: '123', 
          host: '127.0.0.1', 
          port: '3306' 
         }); 

         client2.query('USE testtable'); 

         sql= "update tbla SET a='"+a+"', b='"+b+"', c='"+c+"', d='"+d+"' where ticker='"+sym+"'"; 

         client2.query( 
          sql, function(err, info){ 

           if (err) { 
            throw err; 
           } 
          } 
         ); 

         client2.end(); 


         }); 
        }); 

      })(sym); 



      (function(sym) { 

        url= "http://test3.com/quote.ashx?t="+sym+"&ty=c&ta=1&p=d&b=1"; 

        request({ uri:url3 }, function (error, response, body) { 

         jsdom.env({ 
         html: body, 
         scripts: [ 
          jqlib 
         ] 
         }, function (err, window) { 

         var $ = window.jQuery; 
         var data= $('body').html(); 
         //some scrapping 

         var client3 = mysql.createClient({ 
          user: 'root', 
          password: '123', 
          host: '127.0.0.1', 
          port: '3306' 
         }); 

         client3.query('USE testtable'); 

         sql= "update tbla SET a='"+a+"', b='"+b+"', c='"+c+"', d='"+d+"' where ticker='"+sym+"'"; 

         client3.query( 
          sql, function(err, info){ 

           if (err) { 
            throw err; 
           } 
          } 
         ); 

         client3.end(); 


         }); 
        }); 

      })(sym); 






      (function(sym) { 

        url= "http://test4.com/quote.ashx?t="+sym+"&ty=c&ta=1&p=d&b=1"; 

        request({ uri:url4 }, function (error, response, body) { 

         jsdom.env({ 
         html: body, 
         scripts: [ 
          jqlib 
         ] 
         }, function (err, window) { 

         var $ = window.jQuery; 
         var data= $('body').html(); 
         //some scrapping 

         var client4 = mysql.createClient({ 
          user: 'root', 
          password: '123', 
          host: '127.0.0.1', 
          port: '3306' 
         }); 

         client4.query('USE testtable'); 

         sql= "update tbla SET a='"+a+"', b='"+b+"', c='"+c+"', d='"+d+"' where ticker='"+sym+"'"; 

         client4.query( 
          sql, function(err, info){ 

           if (err) { 
            throw err; 
           } 
          } 
         ); 

         client4.end(); 


         }); 
        }); 

      })(sym); 



      //same function repeat for test5.com, test6.com, test7.com, test8.com, test9.com 



     }); 

はclient.jsプロセス全体が一緒にリンクされますどのように私は本当に、任意のアイデアの男を理解していない (ノード-mysqlのの一部)からのコードの一部ですか?

Client.prototype._connect = function() { 
    this.destroy(); 

    var socket = this._socket = new Socket(); 
    var parser = this._parser = new Parser(); 
    var self = this; 

    socket 
    .on('error', this._connectionErrorHandler()) 
    .on('data', parser.write.bind(parser)) 
    .on('end', function() { 
     if (self.ending) { 
     // @todo destroy()? 
     self.connected = false; 
     self.ending = false; 

     if (self._queue.length) { 
      self._connect(); 
     } 

     return; 
     } 

     if (!self.connected) { 
     this.emit('error', new Error('reconnection attempt failed before connection was fully set up')); 
     return; 
     } 

     self._connect(); 
    }) 
    .connect(this.port, this.host); 

    parser.on('packet', this._handlePacket.bind(this)); 
}; 
+1

そうでない場合は、これは[SQLです:自分のページからhttps://github.com/bminer/node-mysql-queues

サンプルマルチクエリ:ここに情報があります注射脆弱性](http://en.wikipedia.org/wiki/SQL_injection)を参照してください。 – sarnold

+0

笑、アドバイスありがとうございます。後で置くことができます。 –

+0

それは本当に問題ではありません。私はちょうどあなたがそれを知っていることを確認したかった。 :) – sarnold

答えて

1

node-mysql-queuesモジュールは、使用している現在のモジュールのラッパーです。 、私は `A`、 'B'、 'C​​'などが適切に消毒されている願っています

var q = client.createQueue(); 
q.query(...); 
q.query(...); 
q.execute(); 

client.query(...); //Will not execute until all queued queries (and their callbacks) completed. 
関連する問題