Nodejs连接MySQL

首先项目中,需要安装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  
});



声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
Nine 主题
curl 的用法指南
Git 放弃本地修改,强制和之前的某次提交同步
JavaScript 原型链
HTML input range 数值范围选择器
CSRF 双重 Cookie 验证
二分查找法
JavaScript 修改内容和属性