2016-08-19 34 views
1

我正在使用節點js的web服務我在我的代碼中使用pool.getConnection(),使用後pool.getConnection()關閉此連接我使用connection.release();但在任何查詢我不使用任何函數關閉連接。請告訴我此代碼是有效的或不?。connection.release()必須在節點js代碼中有多少?

pool.getConnection(function(err,connection){ 
connection.release(); 
if(!err){ 
    email=req.user.email 
    connection.query('select * from users where email=?',[email], 
    function(err,user_detail){ 
     if(!err) 
     { 
        connection.query('insert into message(??,time,type,user_id) values(?,?,?,?)',[messagecolumns,dbValues,time,type,user_id], 
           function(err,message_inserted){ 
             if(!err) 
             { 
               console.log('Message send',message_inserted.insertId); 
               connection.query('select u.firstname,u.lastname,u.img_path,m.* from users u, message m where u.id=m.user_id and m.id=?',[message_inserted.insertId], 
               function(err,message_detail){ 
                 if(!err) 
                 { 
                  connection.query('select count(id) as message_count from message where appointment_request_id=?',[appointment_request_id], 
                  function(err,total_message){ 
                   if(!err) 
                   { 
                     connection.query('update appointment_request set message_count=? where appointment_request_id=?',[total_message[0].message_count,appointment_request_id], 
                     function(err,update_message_count){ 
                     if(!err) 
                     { 
     } 
    }); 
} 
else { 
    console.log('connection Error',err); 
} 

我覺得這是不是連接有效的方法,因爲從一些網站上我認識到,SQL查詢後,我必須關閉連接,但在此代碼,我從來沒有使用任何密切的聯繫和我的代碼有一些時間給我500服務器錯誤和一段時間它成功的工作,所以我必須解決這個錯誤,我想永久解決,如果任何人都可以幫助我,請給我解決方案。如果你有任何理解的理解,你可以問我。

回答

1

游泳池的連接數量有限(Default is 10)。

當您getConnection那麼其中一個連接是從池中刪除並傳遞給您,以便您可以使用它。您將在完成連接之後致電connection.release()。只要您撥打connection.release(),連接就會傳回池中,並可供代碼的其他部分自由使用。因爲它可能被關閉或者被請求與getConnection連接的代碼的另一部分使用(在大多數情況下它可能仍然有效,因此它在這個連接上調用發佈後無效)但它可能會意外失敗)。

在您的代碼中,您在回撥開始時致電connection.release();,因此connection之後的使用release無效。

您不能在同一連接上多次撥打connection.release()

+0

是這個有效的'pool.getConnection(function(err,connection){connection.release();' – Alex

+0

@Alex這是你的問題中代碼的前兩行!? –

+0

我必須使用' connection.release();'查詢後' – Alex