目前我的进程正在挂起,因为mysql池没有自动关闭。
我认为当我调用connection.release()
时,如果没有人使用它,连接将会关闭。但似乎并非如此。我的代码如下:
getConnection.js:
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'localhost',
user : 'root',
password : 'mysql',
database : 'xxx'
});
module.exports = function getConnection(callback){
pool.getConnection(function(err, connection){
if (err) {
throw err;
}
callback(connection);
});
}
我正在使用它:
var getConn = require('./getConnection');
function selectOne(query, map, cb){
getConn(function(conn){
conn.query(query, map, function(err, rows){
if (err) {
throw err;
}
cb(rows.length ? rows[0] : false);
conn.release();
});
});
}
我想我错过了什么。当我发布它时,node-mysql不应该为我关闭连接吗?
答案 0 :(得分:3)
从https://github.com/felixge/node-mysql#pooling-connections conn.release();
允许将连接释放到连接池,因此不会将其关闭。如果要根据文档https://github.com/felixge/node-mysql#terminating-connections使用conn.end();
来关闭连接。
答案 1 :(得分:2)
我采取了与Ishaan类似的方法,但我认为我的理解有点清晰。
这是我的代码片段。
// Dependencies
var mysql = require('mysql'),
config = require("../config");
/*
* @sqlConnection
* Creates the connection, makes the query and close it to avoid concurrency conflicts.
*/
var sqlConnection = function sqlConnection(sql, values, next) {
// It means that the values hasnt been passed
if (arguments.length === 2) {
next = values;
values = null;
}
var connection = mysql.createConnection(config.db);
connection.connect(function(err) {
if (err !== null) {
console.log("[MYSQL] Error connecting to mysql:" + err+'\n');
}
});
connection.query(sql, values, function(err) {
connection.end(); // close the connection
if (err) {
throw err;
}
// Execute the callback
next.apply(this, arguments);
});
}
module.exports = sqlConnection;
比你可以在任何地方使用它
var mysql_query = require('../models/mysql_query');
mysql_query('SELECT * from your_table where ?', {id: '1'}, function(err, rows) {
console.log(rows);
});
希望这有帮助。
答案 2 :(得分:-1)
我在这里很新,请原谅我,如果我错了。
这就是我这样做的方式
module.exports = {
getDBConnection: function () {
return mysql.createConnection(config.db);
},
connectToDB: function (connection) {
connection.connect(function (err) {
if (err) {
throw err;
}
});
},
endDBConnection: function (connection) {
connection.end(function (err) {
if (err) {
throw err;
}
});
},
exec: function (query, data, cb) {
var connection = this.getDBConnection();
this.connectToDB(connection);
connection.query(query, data, function(err, res) {
if (err) {
cb(err);
}
cb(null, res);
});
this.endDBConnection(connection);
}
}
这是配置变量
db: {
host: 'localhost',
user: 'root',
password: '',
database: 'test'
},