我正在试图弄清楚在节点中实际初始化mysql连接的最佳时间是什么。
我是否应该创建一个连接池,然后将它们设置为全局连接,以便我的所有模型都可以访问池?或者我应该在每次查询时初始化连接?(看起来很糟糕)。
我确信有一些“正确”的方法,但我不确定最好的方法是什么。
答案 0 :(得分: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
});
});
答案 1 :(得分:0)
经过更多的研究,我认为我已经找到了正确的方法。
1)在app start
上创建连接池2)在模型中包含该文件。
3)从池中获取连接。
答案 2 :(得分:0)
为了保持代码清洁,我认为你也可以根据https://github.com/felixge/node-mysql的手册直接调用池对象。这应该抽象出从池中获取和释放连接的逻辑。
EG:
var result = yield pool.query("SELECT * FROM users");
(我使用co-mysql支持生成器,但从语法上来说它应该与回调相同)