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

标签 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)?

});

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

最佳答案

正确的位置是#2 或#5。

您想在使用完毕后释放连接。

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

#5 是正确的,因为回调已经触发,并且您已经完成了要用它做的所有事情。请注意,这假设您在此之前不使用 return 退出该函数。 (有些人在他们的 if (err) block 中这样做。)

如果您没有在回调中的任何地方使用连接,

#2 也是正确的。如果您在回调中使用它,那么您不想在使用完毕之前释放它。

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

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

关于mysql - 使用后释放连接,Node.js 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30295078/

相关文章:

java - 我在哪里放置 Intent 代码?

php - 多对一关系,其中子实体用于 AJAX 文件上传

windows - Azure 虚拟机 (Windows) 的最佳工作流程是什么?

javascript - 注册 Passport 本地注册例程时出错

javascript - Node.js:Mongoose 的内部服务器错误

mysql - 多个 MySQL 数据库连接的优点和缺点

sql - 如果我经常 ORDER BY o.creationDate - 我应该用 @Index 标记 creationDate 吗?

node.js - 基于 Mongoose 的应用架构

node.js - Node : How to catch an exception from middleware?

mysql - 使用 forEach() 和 Node.js 插入数据