node.js学习(十、mysql数据存储)
2017-03-15 23:19
676 查看
在node.js中,mysql的操作需要借助mysql相关的库。在https://www.npmjs.com/搜索mysql,选择搜索结果的第一项mysql库。使用以下命令安装mysql库
在项目根目录中新建一文件夹config,再新建一js文件config.js专门用来存放配置信息。如mysql端口、ip地址,账号、密码,redis的相关配置等。
查看mysql文档,发现其使用的依然是回调模式,这样不利于使用,我们对齐封装改造成同步模式。在/util文件夹中新建mysqldb.js文件,代码如下:
其中config为数据库的配置文件,参考https://www.npmjs.com/package/mysql#connection-options进行配置。
调用方式
npm install mysql
在项目根目录中新建一文件夹config,再新建一js文件config.js专门用来存放配置信息。如mysql端口、ip地址,账号、密码,redis的相关配置等。
查看mysql文档,发现其使用的依然是回调模式,这样不利于使用,我们对齐封装改造成同步模式。在/util文件夹中新建mysqldb.js文件,代码如下:
var mysql = require('mysql'); var async = require('async'); var myUtil = require('./util'); var config = require('../config/config'); //mysqldb: var FILENAME = __filename.split('/').pop() + ':'; //获得连接池 var _pool = mysql.createPool( config.dbconfig ); exports.setPool = function( cfg ){ _pool = mysql.createPool( cfg ); } //执行任意SQL var executSQL = function ( strSql, doneCB ){ var step2 = createStep2( strSql, true ); doQuery( step2, [], doneCB ); }; exports.executSQL = executSQL; exports.executSQL_g = myUtil.coHelper(executSQL); //执行一系列SQL,用于批量插入操作 var serialSQL = function ( SQLs, done ){ //单条语句执行逻辑 function eachItem( item, next ){ console.log(FILENAME,'Do SQL: ', item); exports.executSQL( item, function (err, results ){ if( err ) console.log(FILENAME, err ); else{ console.log(FILENAME, 'result:', results); } //完成后继续执行其他sql next(); }); } //所以sql执行完成回调 function allDone(){ done(); } //异步执行所有sql 参考http://caolan.github.io/async/docs.html#eachSeries async.eachSeries( SQLs, eachItem, allDone ) } exports.serialSQL = serialSQL /** * * @param {Object} Step2 执行函数 * @param {Object} queryParam sql参数 * @param {Object} doneCB 执行完成回调 */ function doQuery( Step2, queryParam, doneCB ){ //数据库连接 var conn; function step1_getConnection( next ){ //连接回调 function got( err, connection ){ //连接发生错误直接返回 if( err ) { console.log('get connection:',err ); next( err );//发生错误,不能往下了 return; } //获得了连接,继续执行其他逻辑 conn = connection; next( null, conn, queryParam ) } //最新执行这一句,获得连接 _pool.getConnection(got); } //执行完成回调 function finalStep( err, result ){ if( conn ) conn.release(); //把信息传递出去 if( !err ){ for( var p in Step2 ){ result[p] = Step2[p]; } } doneCB( err, result ); } //按队列执行,参考http://caolan.github.io/async/docs.html#waterfall async.waterfall( [step1_getConnection, Step2], finalStep ); } exports.doQuery = doQuery; exports.doQuery_g = myUtil.coHelper(doQuery); /** * * @param {Object} strSQL sql语句,带参数sql中参数用?号代替 * @param {Object} noParam 是否为带参sql */ function createStep2( strSQL, noParam ){ function stepFunc( conn, queryParam, next ){ function queryCB(err, result){ if( err ){ console.log(FILENAME, 'stepFunc error ', err ); next( err ); } else next(null, result); }; if( noParam ) conn.query( strSQL, queryCB ); else conn.query( strSQL, queryParam, queryCB ); } return stepFunc; } exports.createStep2 = createStep2;
其中config为数据库的配置文件,参考https://www.npmjs.com/package/mysql#connection-options进行配置。
exports.dbconfig={ port:3306, host:"localhost", user:'root', password :'root', database:'study' }
调用方式
var res=yield mysql.executSQL("select * from TABLENAME"); var res=yield mysql.serialSQL(["insert into TABLENAME ...","insert into TABLENAME ..."]); //item的key和value值需和表结构字段、字段数据类型对应 var item={ key1:'value1', key2:'value2', ... //createStep2为正常逻辑,非异步操作,无需加 yield var step2 = mysql.createStep2('insert into `TABLENAME` set ?'); var res=yield mysql.doQuery_g(step2, item);
相关文章推荐
- node.js学习(十一、mysql存储实例)
- 【《Node.js 实战》学习思维导图】第5章 存储Node程序中的数据
- Node.js在MySQL中存储数据 & 创建连接池
- node.js学习笔记之json数据转string
- node.js+mysql把数据显示到前端简单实例
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
- node.js+mysql实现批量存储
- Node.js的学习--使用cheerio抓取网页数据
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
- MySQL学习笔记之数据存储类型
- node.js使用mongodb存储数据-客户端使用
- Node.js中调用mysql存储过程示例
- MySQL学习笔记2---MySQL数据库的存储引擎和数据类型
- node.js+mysql学习笔记
- node.js如何读取MySQL数据
- node.js基础:数据存储
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- node.js 学习第四天 请求的方式 同步--异步请求数据