使用async.waterfall封装数据库查询

  近来学习node.js,想到一个使用async.waterfall封装数据库访问的简单方法,代码很容易,一看就明白。
  需要注意的就是waterfall传入参数(使用第二个函数传入参数)、传出结果的方法。


var oracledb = require('oracledb');
var dbConfig = require('./dbconfig');

function doConnect(cb) {
	oracledb.getConnection(
		{
			user          : dbConfig.user,
			password      : dbConfig.password,
			connectString : dbConfig.connectString
		},
		cb);
};

function doRelease(conn) {
	conn.release(function (err) {
		if (err)
			console.error(err.message);
	});
};

function doQuery(conn,sql,param, cb) {
	console.log('sql='+sql+', param='+param);
	conn.execute(
		sql,
		param, 
		{ outFormat: oracledb.OBJECT }, 
		function(err, result)
		{
			if (err) {
				return cb(err, conn);
			} else {
				return cb(null, conn,result.rows);
			}
		});
};

function select(sql,param,callback){
	var async = require('async');
	async.waterfall([
		doConnect,
		function(conn,cb) {
			cb(null, conn, sql, param);
		},
		doQuery
	],function(err,conn,result){
		if (err) { console.error("In waterfall error cb: ==>", err, "<=="); }
		else{callback(result);}
		if (conn){ doRelease(conn);}
	});
};

module.exports.select = select;


使用示例:
var dbUtil = require('./server/util/DbUtil');//上面的文件

dbUtil.select("select * from tab",{},function(result){
    console.log(result);
});

猜你喜欢

转载自wallimn.iteye.com/blog/2342769
今日推荐