使用后释放连接,连接池Node.js

时间:2015-05-18 04:23:14

标签: mysql node.js express

我想知道在使用它之后应该在哪里发布连接,我已经看到了几个选项:

pool.getConnection(function(err, conn){

    //conn.release() // should be placed here (1)?
    conn.query(query, function(err, result){

       //conn.release() // should be placed here (2)?
       if(!err){
           //conn.release() // should be placed here (3)?
       }
       else{
           //conn.release() // should be placed here (4)?
       }
       //conn.release() // should be placed here (5)?
    });

    //conn.release() // should be placed here (6)?

});

或者也许应该发布错误和非错误情况?

1 个答案:

答案 0 :(得分:4)

正确的地方是#2或#5。

您希望在完成连接后释放连接。

#6是错误的,因为query()是异步的,所以它会在连接完成查询之前和回调触发之前立即返回。因此,在完成连接之前,您将释放连接。

#5是正确的,因为回调已经解雇,你已经完成了你将要做的一切。请注意,这假定您不使用return在该点之前退出该函数。 (有些人在他们的if (err)区块中这样做。)

如果您未在回调内的任何位置使用连接,则

#2也是正确的。如果 在回调中使用它,那么在完成使用之前你不想发布它。

#3和#4不正确,除非您使用两者。否则,您只是在某些情况下释放连接。

并且#1不正确,因为您尚未使用该连接。