NodeJS + mysql - 自动关闭池连接?

时间:2016-11-01 10:49:26

标签: mysql node.js connection-pooling

我希望使用NodeJS与MySQL数据库的连接池。根据文档,有两种方法可以做到这一点:我明确地从池中获取连接,使用它并释放它:

var pool = require('mysql').createPool(opts);

pool.getConnection(function(err, conn) {
    conn.query('select 1+1', function(err, res) {
        conn.release();
    });
});

或者我可以这样使用它:

var mysql = require('mysql');
var pool  = mysql.createPool({opts});

pool.query('select 1+1', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

如果我使用第二个选项,是否意味着连接会自动从池中拉出,使用和释放?如果是这样,是否有理由使用第一种方法?

2 个答案:

答案 0 :(得分:0)

万一其他人偶然发现:

使用pool.query时,实际上是在调用快捷方式,该快捷方式的作用与第一个示例相同。

来自readme

  

这是pool.getConnection()-> connection.query()-> connection.release()代码流的快捷方式。使用pool.getConnection()对于共享后续查询的连接状态很有用。这是因为两次调用pool.query()可能会使用两个不同的连接并并行运行。

是的,第二个也正在调用connection.release(),您只需要键入它即可。

答案 1 :(得分:0)

是的,第二个意思是池负责获取下一个空闲连接,对此进行查询,然后再次释放它。您可以将其用于没有依赖项的“一枪” 查询。

如果要执行多个相互依赖的查询,请使用第一个查询。连接包含某些状态,例如锁,事务,编码,时区,变量等。

下面是一个更改使用的时区的示例:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Onload this document will Translate to French.<br><br>
<button id="toggleLang">Toggle language</button>
<div data-translate="0">Download - Document</div><br><br>
<div data-translate="1">It's not a document</div><br><br>
<div data-translate="2">Translate this, while you<br />are fast asleep.</div>