由于初学pomelo 所以看了很多参考资料,感谢诸位博客的内容分享。
参考1参考2参考3 参考4
看了很多的blog,大部分的mysql都是使用池来管理连接。很大一部分使用的是generic-pool插件,一开始尝试很好用不过遇到了同样的连接长时间不用失效的问题。使用网上推荐的处理连接错误的方法又不方便取回client连接对象,最后使用的是mysql插件自带的连接池,用法很简单。
需要安装 npm install mysql -g
//sqlPool.js
var mysql=require("mysql");
var pomelo = require('pomelo');
var mqlMgr = {};
mqlMgr.create = function() {
var mysqlConfig = pomelo.app.get('mysql');
var conn = mysql.createPool({
host: mysqlConfig.host,
user: mysqlConfig.user,
password: mysqlConfig.password,
database: mysqlConfig.database,
// port: mysqlConfig.port
});
return conn;
};
mqlMgr.query = function (sql, args, callback) { //可以改成sql,callback两个参数
pool.getConnection(function(err,conn){
if(err) {
callback(err,null);
} else {
conn.query(sql, args, function(qerr,res){ //这里返回的参数可以改变一下 直接取到查询结果
conn.release();
callback(qerr,res);
});
}
});
};
module.exports = mqlMgr;
配置文件如下:
//mysql.json
{
"development": {
"host" : "127.0.0.1",
"port" : "3306",
"database" : "PomeloDB",
"user" : "root",
"password" : "123456"
},
"production": {
"host" : "127.0.0.1",
"port" : "3306",
"database" : "PomeloDB",
"user" : "root",
"password" : "123456"
}
}
//app.js
app.loadConfig("mysql", app.getBase() + "/config/mysql.json"); // 添加配置
app.configure('production|development', "gate|login|connector", function () {
var dbclient = require("./app/dao/sqlPool.js").create(); // 初始化dbclient
app.set("dbclient", dbclient);// dbclient 为外部数据库接口,app,get("dbclient") 来使用
})
"gate|login|connector"替换为需要使用的服务器
使用方法:
loginD.loginUser = function(user, cb) {
var sql = 'call xp_loginUser(?,?)';
var args = [user.uName,user.uToken];
pomelo.app.get('dbclient').query(sql, args, function(err, res) {
if (err) {
logger.error('select failed! ' + err.stack);
} else {
if(res[0][0].cond == 1) {
cb(null, {code: 200});
} else {
cb(null, {code: 500,e:3});
}
}
});
};
有的朋友遇到了需要得到执行query对象的情况,不推荐封装query。其实可以用mysql事件系统来解决问题,避免暴露连接。