我使用redis-store存储session,做了一个用户管理模块,在做用户多条件组合模糊查询时,将上次查询的条件存储在session当中,下次回到列表页面时,保持查询条件。 exports.list = function(req,res,next){ var method = req.method.toLowerCase(); var pageNum = req.param(‘pageNum’); if(!pageNum){ pageNum = 1; } if(method == ‘post’){//用户查询,post请求 var userid = req.body.userid; var username = req.body.username; var phone = req.body.phone; var email = req.body.email; var activeStr = req.body.active; var is_adminStr = req.body.is_admin; var cond = {}; //组合查询条件 if(userid){ cond.userid = new RegExp(userid.trim());//模糊查询,使用正则 } if(username){ cond.username = new RegExp(username.trim());//模糊查询,使用正则 } if(phone){ cond.phone = new RegExp(phone.trim());//模糊查询,使用正则 } if(email){ cond.email = new RegExp(email.trim());//模糊查询,使用正则 } if(activeStr == ‘1’){ cond.active = true; }else if(activeStr == ‘0’){ cond.active = false; } if(is_adminStr == ‘1’){ cond.is_admin = true; }else if(is_adminStr == ‘0’){ cond.is_admin = false; } req.session.userSearchCond = cond; //将查询条件存进session } var searchCond = req.session.userSearchCond; //从session中获取查询条件 console.log(‘session get’,searchCond);//打印查询条件 User.find(searchCond).exec(function(err,totalUsers){ //使用Mongoose,根据条件进行查询 if(err){ return next(err); } var totalPageNum = (totalUsers.length + pageSize -1) / pageSize; User.find(searchCond).sort({create_time: -1}) .skip((pageNum-1)*pageSize).limit(pageSize) .exec(function(err,users){ if(err){ return next(err); } res.render(‘user/user_list’,{ user: req.session.user, users: users, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString(), totalPageNum: totalPageNum, currentPageNum: pageNum, searchCond : searchCond, title: ‘后台管理-用户列表’ }); }); }); } 当进行post查询时,所有条件能够正常显示, session get { userid: /55/ } 但是再一次get访问user/list路径时,查询条件打印出来为: session get { userid: {} } 查询条件的正则表达式/55/变成了一个空对象。 这是为什么呀?跪求高手指定。
get 的时候,req.body 没东西。req.body 提取的是 post body 里面的东西。
另:楼主之前是写 Java 的吗,看代码有点那意思?
呵呵,见笑了,刚刚开始学习nodejs。 代码中只有Post方法时才重新取值,如果是get方式,直接从session中取值的。 但是get方式从session中取出上回的查询条件时,正则表达式的模糊查询value值不见了。取出的是空对象。