首先项目中,需要安装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 });
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。