Reproduce MySQL error: The server closed the connection (node.js)

后端 未结 5 1794
你的背包
你的背包 2020-12-25 14:38

I\'m trying to reproduce a MySQL error I\'m seeing in my node.js app on EC2 with the node mysql library:

Connection lost: The server closed the connec

5条回答
  •  佛祖请我去吃肉
    2020-12-25 15:13

    Using generic-pool, I wrote something that works locally. I guess I'll test it and see if it doesn't crash in bizarre manner on the server side.

    // Test node connection pool stuff
    
    // Create a MySQL connection pool with
    // a max of 10 connections, a min of 2, and a 30 second max idle time
    var poolModule = require('generic-pool');
    var pool = poolModule.Pool({
        name     : 'mysql',
        create   : function(callback) {
            var Client = require('mysql').Client; // use node-mysql library in all it's dubious glory
            var c = new Client();
            c.user     = 'root';
            c.password = 'xxx';
            c.database = 'test';
            c.on('close', function (err) {
              console.log('mysqldb conn close');
            });
            c.on('error', function (err) {
              console.log('mysqldb error: ' + err);
            });
    
            // parameter order: err, resource
            // new in 1.0.6
            callback(null, c);
        },
        destroy  : function(client) { client.end(); },
        max      : 10,
        // optional. if you set this, make sure to drain() (see step 3)
        min      : 2, 
        // specifies how long a resource can stay idle in pool before being removed
        idleTimeoutMillis : 30000,
         // if true, logs via console.log - can also be a function
        log : true 
    });
    
    var http = require('http');
    http.createServer(function (req, res) {
    
      // Get db conn
      pool.acquire(function(err, client) {
          if (err) {
              // handle error - this is generally the err from your
              // factory.create function 
              console.log('pool.acquire err: ' + err);
              res.writeHead(500, {'Content-Type': 'application/json'});
              out = {
                err: err
              }
              res.end(JSON.stringify(out));
          }
          else {
              client.query("select * from foo", [], function(err, results) {
    
                  if(err){
                    res.writeHead(500, {'Content-Type': 'application/json'});
                    out = {
                      err: err
                    }
                    res.end(JSON.stringify(out));
                  } else {
                    res.writeHead(500, {'Content-Type': 'application/json'});
                    out = {
                      results: results
                    }
                    res.end(JSON.stringify(out));
                  }
    
    
                  // return object back to pool
                  pool.release(client);
              });
          }
      });
    }).listen(9615);
    

    Pretty please don't die at 4am for no apparent reason!

提交回复
热议问题