首先项目中,需要安装mysql模块:
npm install --save-dev mysql
然后就可以使用一下代码了:var mysql = require('mysql');
var database = {
host: '127.0.0.1',
user: 'root',
password: 'root',
database: '8081', // 前面建的user表位于这个数据库中
port: 3306
};
var connection = mysql.createConnection(database);
connection.connect();
connection.query("select * from cmf_posts", function (error, results, fields) {
if (error) throw error;
res.render('mysql.ejs',{results: results[0]});
});
connection.end();
但是这样有一个问题,MySQL中有一个名叫wait_timeout的变量,表示操作超时时间,当连接超过一定时间没有活动后,会自动关闭该连接,这个值默认为28800(即8小时)。而nodejs连接丢失后不会自动重新连接,会触发error事件。
两种方式解决:
1、你可以配置mysql的连接池var mysql = require('mysql');
var pool = mysql.createPool({
host: 'localhost',
user: 'nodejs',
password: 'nodejs',
database: 'nodejs',
port: 3306
});
var selectSQL = 'select * from t_user limit 10';
pool.getConnection(function (err, conn) {
if (err) console.log("POOL ==> " + err);
conn.query(selectSQL,function(err,rows){
if (err) console.log(err);
console.log("SELECT ==> ");
for (var i in rows) {
console.log(rows[i]);
}
conn.release();
});
});
2、你可以使用断线重连的方式来解决var mysql = require('mysql');
var conn;
function handleError () {
conn = mysql.createConnection({
host: 'localhost',
user: 'nodejs',
password: 'nodejs',
database: 'nodejs',
port: 3306
});
//连接错误,2秒重试
conn.connect(function (err) {
if (err) {
console.log('error when connecting to db:', err);
setTimeout(handleError , 2000);
}
});
conn.on('error', function (err) {
console.log('db error', err);
// 如果是连接断开,自动重新连接
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
handleError();
} else {
throw err;
}
});
}
handleError();
连接池模块:
建立一个类库,就叫mysql.js吧,然后内容如下:var mysql=require("mysql");
var pool = mysql.createPool({
host: 'localhost',
user: 'user',
password: 'password',
database: 'database',
port: port
});
var query=function(sql,callback){
pool.getConnection(function(err,conn){
if(err){
callback(err,null,null);
}else{
conn.query(sql,function(qerr,vals,fields){
//释放连接
conn.release();
//事件驱动回调
callback(qerr,vals,fields);
});
}
});
};
module.exports=query;
在js类使用如下var query=require("./lib/mysql.js");
query("select 1 from 1",function(err,vals,fields){
//do something
});
修改时间 2016-07-15
真诚赞赏,手留余香
赞赏