在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);
}
});
}
}