mysql2tb_NodeJS mysql2 使用心得

NodeJS mysql2 使用

一、mysql2的安装

之前有用过 mysql 的模块,但是感觉并不太好用。至少语义替换这块并没有很好的解决办法, 看到mysql2有这个功能,果断就替换。使用下列命令就可以很轻松安装。

npm install mysql2 --save

二、mysql2的使用

首先自己建一个新文件名字为 mysql_pool.js 。然后,废话不多说,直接上代码。

var mysql = require('mysql2');

var mysql_pool = mysql.createPool({

host: MYSQL_HOST,

user: MYSQL_USER,

password: MYSQL_PASS,

database: MYSQL_DATABASE,

port: MYSQL_PORT

});

module.exports=mysql_pool;

通过建立 mysql IP池 ,我们可以让连接循环利用,让nodejs跑得更欢快。

这样在nodejs里面就可以直接得到这个模块了。然后在其他地方直接使用这个模块。

var mysql_pool = require('../lib/mysql_pool');

function tb_reward_model(){

this._status = {

"SUCCESS":1,

"FAILURE":0,

"ISIDENTIFY":2,

"ERROR":-1

};

}

tb_reward_model.prototype.setnotvalid = function(re_id){

mysql_pool.execute("UPDATE `tb_reward` SET `re_isvalid`='N' WHERE `re_id`= ? "

,[re_id]

,function(err,rows){

if(err){

console.log(err);

return that._status.ERROR;

}

else{

return that._status.SUCCESS;

}

}

);

};

这里附带一句,如果要根据返回值判断,还必须使用q来进行异步编程。

因为Nodejs本身是单线程模式,不同直接获取这个函数值得返回值来判断是否成功。如下:

var q = require('q');

tb_reward_model.prototype.setnotvalid = function(re_id){

var that = this;

var deferred = q.defer();

mysql_pool.execute("UPDATE `tb_reward` SET `re_isvalid`='N' WHERE `re_id`= ? "

,[re_id]

,function(err,rows){

if(err){

console.log(err);

deferred.reject(that._status.ERROR);

}

else{

deferred.resolve(that._status.SUCCESS);

}

}

);

return deferred.promise;

};

三、mysql2 的进阶使用

仅仅使用它自带的函数还有一点不够,需要阅读它的源码并自己写函数才能满足开发需求,例如返回INSERT 语句插入句的自增ID,这个必须要在一个对话下完成,不然就无法通过Mysql数据库自带的函数来得到ID值。

SELECT LAST_INSERT_ID()

通过查看它的execute方法,我写出了如下函数来解决这个问题,还在刚才的mysql_pool模块中:

mysql_pool.create_and_return_id = function(sql, values, cb){

if (typeof values === 'function') {

cb = values;

values = null;

}

this.getConnection(function (err, conn) {

if (err) return cb(err);

conn.execute(sql, values, function () {

conn.execute("SELECT LAST_INSERT_ID() as id",function(){

conn.release();

cb.apply(this, arguments);

});

});

});

};

这样子后,就可以通过原来的方法开心地调用这个函数,来获得返回值了。

tb_reward_model.prototype.create = function(user_id){

var that = this;

var deferred = q.defer();

mysql_pool.create_and_return_id("INSERT INTO `tb_reward` (`user_id`) VALUES (?)"

,[user_id]

,function(err,rows){

if(err){

console.log(err);

deferred.reject(that._status.ERROR);

}

else{

if(rows.length > 0 ){

deferred.resolve(rows[0].id);

}

deferred.reject(that._status.FAILURE);

}

}

);

return deferred.promise;

};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值