查询函数调用时的工作:
//index.js
exports.problemset = function(req, res) {
var str = req.query.search, page = parseInt(req.query.page);
var q = {}; //定义空的查询对象
if (str) { //如果有搜索请求就增加查询条件
//用正则表达式得到的pattern对title属性进行模糊查询
//这里是搜集合里title属性包含str串的所有结果
var pattern = new RegExp("^.*"+str+".*$");
q.title = pattern;
}
if (!page) page = 1;
var order = req.query.order;
var sq = {}, Str, A = 'problemID', B = 'asc';
if (order) { //是否有排序请求
Str = order.split('_');
A = Str[0]; B = Str[1];
sq[A] = B; //关联数组增加查询条件,更加灵活,因为A是变量
} else {
sq.problemID = 1; //默认排序查询条件
}
Problem.get (q, sq, page, function(err, problems, pn) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
//to do ...
});
};
查询函数的定义:
//problem.js
......//前面省略,这里用的是mongoose操作
Problem.get = function get(q, sq, n, callback) {
problems.find(q).sort(sq).find(function(err, docs){
if (err) {
return callback('Problems matched failed', null, 1);
}
return callback(err, docs.slice((n-1)*20,n*20), docs.length);
});
};