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
- NodeJS mysql2 使用心得
- Github、NodeJS使用心得
- nodejs安装使用心得
- MySQL2
- mysql2
- mysql2
- MySQL2
- MySQL2
- mySQL2
- MySQL2
- ruby 安装和使用 mysql2
- nodejs心得
- Windows下Ruby使用mysql2连接Mysql
- nodejs初写心得
- nodejs初写心得
- nodejs破解12306心得
- nodejs初写心得
- nodejs使用
- 输出随机数字的认证图片
- 红黑树并没有我们想象的那么难(上)
- Android性能优化
- fork与wait的使用
- 用android虚拟机,向sdcard导入文件时候报错 transfer error: Read-only file system
- NodeJS mysql2 使用心得
- VS2010 MFC Excel(3)
- ACM第二专题—搜索总结
- 利用求值器绘制三次Bezier曲线
- 红黑树并没有我们想象的那么难(下)
- HashMap学习
- 插入排序
- ACM--贪心--FZU--2111--Min Number
- Makefile经典教程(掌握这些足够)