Too many connection.release

I'm using node-mysql with pool connection to handle database stuff. Everything is great, but the way connection is released. It seems that connection.release() need calling at anytime an event is going to be ended. This is very inconvenient and also make my code a lot more uglier.

db.getConnection(function(error,conn){
    if(error){
         conn.release();
         throw error;
    }
    conn.query(query1,value1,function(err,result){
         if(err){
              conn.release();
              throw err;
         }
         if(!value1){
             return conn.release();
         }
         // do something here
         if(!value2){
             return conn.release();
         }
         // do something here
         ...
         ...
         ...
         if(!valueN){
             return conn.release();
         }
         // do something here
         conn.release();
    });
    conn.query(query2,value2,function(err,result){
         if(err){
              conn.release();
              throw err;
         }
         if(!value1){
             return conn.release();
         }
         // do something here
         if(!value2){
             return conn.release();
         }
         // do something here
         ...
         ...
         ...
         if(!valueN){
             return conn.release();
         }
         // do something here
         conn.release();
    });
    ...
    ...
    ...
    conn.query(queryN,valueN,function(err,result){
         if(err){
              conn.release();
              throw err;
         }
         if(!value1){
             return conn.release();
         }
         // do something here
         if(!value2){
             return conn.release();
         }
         // do something here
         ...
         ...
         ...
         if(!valueN){
             return conn.release();
         }
         // do something here
         conn.release();
    });
});

I feel that this problem is so real. How can I avoid it?

just enclose your code in a try statement and then put a finally block with conn.release:

conn.query(query1,value1,function(err,result){

    try {
     if(err){
          throw err;
     }
     if(!value1){
         return;
     }
     // do something here
     if(!value2){
         return;
     }
     // do something here
     ...
     ...
     ...
     if(!valueN){
         return;
     }
   }
   finally { conn.release(); }
});

finally block is going to be executed whatever happen (with exception of System.Exit)