NodeJS mysql2 使用心得

来源:互联网 发布:软件测试脚本 编辑:程序博客网 时间:2024/05/20 02:24

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 0