title: Node JS Mysql PROTOCOL ENQUEUE AFTER FATAL ERROR
body: <p>What does the error mean?</p>
  
  <pre><code>{ [Error: Cannot enqueue Query after fatal error.] code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR', fatal: false }
  </code></pre>
  
  <p>This code works in my test file:</p>
  
  <pre><code>function handleDisconnect() {
      objConn = mysql.createConnection(db_config);    // Recreate the connection, since
                                                      // the old one cannot be reused.
      objConn.connect(function(err) {                 // The server is either down
          if(err) {                                   // or restarting (takes a while sometimes).
              console.log('error when connecting to db:', err.code);
              setTimeout(handleDisconnect, 2000);     // We introduce a delay before attempting to reconnect,
          }else{
              console.log('Connected to db!');
          }                                           // to avoid a hot loop, and to allow our node script to
      });                                             // process asynchronous requests in the meantime.
                                                      // If you're also serving http, display a 503 error.
      objConn.on('error', function(err) {
          if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
              handleDisconnect();                       // lost due to either server restart, or a
          }else{
              throw err;
          }
      });
  }
  
  handleDisconnect();
  megaLoop();
  
  function megaLoop(){
      objConn.query('SELECT u.`email` FROM `users` as u', function(err, rows) {
          console.log(err);
          console.log(rows);
      });
      setTimeout(megaLoop, 100); 
  }
  </code></pre>
  
  <p>But when I use the function in my Express App I get the error:</p>
  
  <pre><code>{ [Error: Cannot enqueue Query after fatal error.] code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR', fatal: false }
  </code></pre>
  
  <p>Why does it work in my test and not my app?</p>