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

标签 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);
});

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

最佳答案

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

如果你想做多个相互依赖的查询,你可以使用第一个。一个连接拥有特定的状态,比如锁、事务、编码、时区、变量……。

这里是一个改变使用的时区的例子:

pool.getConnection(function(err, conn) {
    function setTimezone() {
       // set the timezone for the this connection
       conn.query("SET time_zone='+02:00'", queryData);
    }

    function queryData() {
       conn.query( /* some query */, queryData);
    }


    function restoreTimezoneToUTC() {
       // restore the timezone to UTC (or what ever you use as default)
       // otherwise this one connection would use +02 for future request
       // if it is reused in a future `getConnection`
       conn.query("SET time_zone='+00:00'", releseQuery);
    }

    function releaseQuery() {
        // return the query back to the pool
        conn.release()
    }

    setTimezone();
});

关于mysql - NodeJS + mysql - 自动关闭池连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358562/

相关文章:

javascript - 你如何使用 knex.js 按顺序链接查询?

mysql - nodejs + mysql : when to use pooled connections?

java - 在数据库服务器端终止 session 是否也会关闭连接并使 jdbc 连接对象为空?

mysql - Laravel 保存子记录,但将外键设置为 null

mysql - 优化比较两个MySQL大表中的数据

python - CSV 文件到 SQL 插入语句

PHP 使用密码加密方案的安全登录系统

node.js - Node Hmac 认证

javascript - "fs.writefile"函数中的自定义文件名

python - 在 django 请求之间共享单个连接