0

我试图弄清楚在节点中实际初始化 mysql 连接的最佳时间是什么时候。

我是否应该创建一个连接池,然后将它们设置为某个全局,以便我的所有模型都可以访问该池?还是我应该在进行查询时初始化连接?(看起来很糟糕)。

我确信有一些“正确”的方法可以做到这一点,但我不确定最好的方法是什么。

4

3 回答 3

1

如果您要合并连接,请不要在需要时立即初始化连接。当不使用池时,您可以在应用程序启动时存储连接信息,并在需要时使用它:

var mysql = require('mysql');
var connection = mysql.createConnection({
  host: 'localhost',
  user: 'me',
  password: 'secret'
});

然后对于单个用例:

connection.connect();
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  // we are done with the connection
  connection.end();

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

如果您正在使用池,您应该在应用程序启动时创建一个连接池,并在需要时获取连接。你不应该做多个游泳池。

var mysql = require('mysql');
var pool  = mysql.createPool({
  host: 'example.org',
  user: 'bob',
  password: 'secret'
});

然后,当您需要连接时,您会执行以下操作:

pool.getConnection(function(err, connection) {
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // we are done using the connection, return it to the pool
    connection.release();

    // the connection is in the pool, don't use it here
  });
});
于 2013-09-16T16:11:51.387 回答
0

根据https://github.com/felixge/node-mysql上的手册,为了保持代码更简洁,我认为您也可以直接调用池对象。这应该抽象出从池中获取和释放连接的逻辑。

例如:

var result = yield pool.query("SELECT * FROM users");

(我正在使用支持生成器的 co-mysql,但在语法上它应该与回调相同)

于 2014-04-30T21:01:21.813 回答
0

经过更多研究,认为我已经找到了正确的方法。

1)在应用启动时创建连接池

2)将该文件包含在您的模型中。

3) 从池中获取连接。

于 2013-09-16T13:08:43.243 回答