pomelo+mysql 学习(二)dao

在dao文件夹下新建userDao.js

var pomelo = require('pomelo');
var logger = require('pomelo-logger').getLogger(__filename);
var utils = require('../util/utils');
var User = require('../domain/user');
var consts = require('../consts/consts');


//对user 的数据库操作
var userDao = module.exports;


/**
 * get user infomation by userId
 * @param {String} uid UserId
 * @param {function} cb Callback function
 */
userDao.getUserByUserId = function(uid,cb){
	var sql ='select * from user where id=?';
	var args = [uid];
	pomelo.app.get('dbclient').query(sql,args,function(err,res){
		if(err!==null){
			utils.invokeCallback(cb,err,null);
		}
		
		if(!!res&& res.length >0){
			utils.invokeCallback(cb,null,new User(res[0]));	
		}else{
			utils.invokeCallback(cb,'user not exist',null);
		}				
	});		
} 


/**
 * Create a new user
 * @param (String) username
 * @param {String} password
 * @param {String} from Register source
 * @param {function} cb Call back function.
 */
userDao.createUser = function(username,password, cb){
	var sql = 'insert into user (userName, password, loginCount, lastLoginTime) values (?,?,?,?)';
	var loginTime = Date.now();
	var args = [username,password,1,loginTime];
	pomelo.app.get('dbclient').insert(sql,args,function(err,res){
		if(err!==null){
			utils.invokeCallback(cb,{code:err.number, msg: err.message},null);
		}else{
			var user = new User({id:res.insertId, userName:username, password:password,loginCount:1,lastLoginTime: loginTime });
			utils.invokeCallback(cb,null,user);
		}
	});
}
/**
 * Update a user 
 * @param {Object} user The user need to update, all the propties will be update.
 * @param {function} cb Callback function.
 */
userDao.updateUser = function(user,cb){
	var sql='update user set userName=?, password=?,loginCount=?, lastLoginTime=? where id=?';
	var args=[user.userName, user.password, user.loginCount,user.lastLoginTime,user.uid];
	
	pomelo.app.get('dbclient').query(sql,args,function(err,res){
		if(err!==null){
			utils.invokeCallback(cb,err.message,null);
		}else{
			if(!!res&&res.affectedRows>0){
				utils.invokeCallback(cb,null,true);
			}else{
				logger.error('update user failed');
				utils.invokeCallback(cb,null,false);
			}
		}
	});
}


/**
 * Get user data by username.
 * @param {String} username
 * @param {String} passwd
 * @param {function} cb
 */
 
userDao.getUserInfo = function(username , passwd, cb){
	var sql='select * from user where userName= ?';
	var args=[username];
	
	pomelo.app.get('dbclient').query(sql,args,function(err, res){
		if(err !== null){
			utils.invokeCallback(cb,err,null);	
		}else{
			var userId = 0;
			//当值是非空字符串和非零数字返回true,当值是空字符串、0或者null返回false。
			if(!!res && res.length===1){
				var rs = res[0];
				userId = rs.id;
				rs.uid = rs.id;
				utils.invokeCallback(cb,null, rs);
			}else{
				//userName
				utils.invokeCallback(cb,null,{uid:0,username: username});
			}			
		}	
	});
}


/**
 * Get userInfo by username
 * @param {String} username
 * @param {function} cb
 */
userDao.getUserByUserName = function (username, cb){
	var sql = 'select * from user where userName =?';
	var args = [username];
	pomelo.app.get('dbclient').query(sql,args,function(err,res){
		if(err !== null){
			//err   err.message
			utils.invokeCallback(cb,err.message,null);
		}else{
			if(!!res&&res.length===1){
				var rs = res[0];
				//引用了user.js    rs.username?
				var user = new User({id:rs.id, userName: rs.userName, password:rs.password });
				utils.invokeCallback(cb,null,user);
			}else{
				utils.invokeCallback(cb,'user not exist',null);
			}
		}	
	});	
}

在dao文件夹下新建mapping文件夹,之后新建userSync.js。pomelo-sync自身只负责实现db数据和内存数据之间的定时同步,所以pomelo-sync-plugin就将pomelo-sync封装成了一个组件。pomelo-sync在构造的时候,将参数里的client(与持久化层的链接)、mapping(如各种操作的sql语句的映射表)等赋值给自己的相应成员,最后开启定时刷内存数据到持久化层的计时器SyncTimer。

module.exports= {
	updateUser: function(client, user, cb){
		var sql='update user set userName=?,password=?,loginCount=?,lastLoginTime=? where id=?';
		var args=[user.userName, user.password,user.loginCount,user.lastLoginTime,user.uid];
		client.query(sql,args,function(err,res){
			if(err!==null){
				console.error('write mysql failed!'+sql+' '+ JSON.stringify(user)+' stack:'+err.stack);				
			}
			if(!!cb && typeof cb == 'function'){
				cb(!!err);
			}
		});	
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值