pomelo连接mysql

由于初学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事件系统来解决问题,避免暴露连接。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值