var mysql = require('mysql'),
env = {
host : 'localhost',
user : 'root',
password : '2212',
database : 'image_marker'
};
db = mysql.createConnection(env);
db.connect();
exports.do = function (sql, callback) {
db.query(sql, callback);
}
MySQL中有一个名叫wait_timeout的变量,表示操作超时时间,当连接超过一定时间没有活动后,会自动关闭该连接,这个值默认为28800(即8小时)。对于这种普通连接的方式,在正式线上可能会遇到连接丢失的问题(No reconnection after connection lost错误日志),上github上看了下文档和issues,上面说到连接丢失后不会自动重新连接,会触发error事件。 所以可以使用下面这种方法来避免连接对视问题:
function handleError (err) {
if (err) {
// 如果是连接断开,自动重新连接
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
connect();
} else {
console.error(err.stack || err);
}
}
}
// 连接数据库
function connect () {
db = mysql.createConnection(config);
db.connect(handleError);
db.on('error', handleError);
}
var db;
connect();
var mysql = require('mysql');
var pool = mysql.createPool(config);
pool.getConnection(function(err, connection) {
// Use the connection
connection.query( 'SELECT something FROM sometable', function(err, rows) {
// And done with the connection.
connection.end();
// Don't use the connection here, it has been returned to the pool.
});
});
参考:https://cnodejs.org/topic/51cd3bcc73c638f3705998f5
使用了连接池后,有网友说每一次请求都用pool创建一个connection,改进我的代码如下连接:
http://www.2cto.com/kf/201404/292016.html