您的位置:首页 > 运维架构 > 网站架构

第8章 完善之搜索、精华功能

2014-03-27 22:37 127 查看
小站:http://oideas.herokuapp.com

教程演示地址:http://omind.herokuapp.com

教程代码地址:https://github.com/joveth/OMinds

QQ交流群:158325682

1、搜索功能

还记得common.js吗,对就是这里,在将:

$("#searckBtn").click(function(){
if(!flag){
$("#headbar").append("<li id=searchinput><from id=searchForm method='get' action='/search' ><input type=text id=search_input name=searchkey class=searck_input onkeydown=doSubmit() ></form></li>");
}else{
$("#searchinput").remove();
}
flag = !flag;
});


其中,input添加了id,和onkeydown事件监听(其它的修改没什么用)。

ok,在该文件的最后(是最后哦),添加doSubmit方法:

function doSubmit(){
var currentKey = event.which;
if(currentKey==13){
if($("#search_input").val()==null||$("#search_input").val()==''){
return false;
}
//$("#searchForm").action = '/search';
window.location.href="/search?searchkey="+$("#search_input").val();
}
}


就是监听键盘的enter键按下后的事件(不知到为什么用form的submit方法不行,有知道的同学说一下)。

ok,打开routes/index.js,添加方法:

app.get('/search', function (req, res) {
var key = req.query.searchkey;
if (!key) {
return res.redirect('/');
}
var pattern = new RegExp("^.*" + key + ".*$");
User.searchByKey(pattern, function(err, users) {
if (err) {
users = [];
}
Mind.searchByKey(users, pattern, function(err, minds) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
res.render('index', {
title : 'OMinds - 搜索',
minds : minds,
user : req.session.user
});
});
});
});


其中,先去查找有没有相关的用户,再根据用户查找它的minds,

打开model下的user.js,添加方法:

//查找用户(检索)
User.searchByKey = function(skey, callback) {
mongodb.connect(settings.url, function(err, db) {
if (err) {
return callback(err);
}
db.collection('users', function(err, collection) {
if (err) {
db.close();
return callback(err);
}
collection.find({
nickname : skey
}).toArray(function(err, results) {
db.close();
if (err) {
return callback(err);
}
callback(null, results);
});
});
});
};


打开mind.js,添加方法:

Mind.searchByKey = function(users,skey,callback) {
mongodb.connect(settings.url,function (err, db) {
if (err) {
return callback(err);
}
db.collection('minds', function(err, collection) {
if (err) {
db.close();
return callback(err);
}
collection.find({flag:true,"$or" :[{user:{"$in":users}},{"content":skey}]}).sort({cdate: -1,comments:-1,ups:-1,downs:-1}).toArray(function(err,results){
db.close();
if (err) {
return callback(err);
}
callback(null, results);
});
});
});
};


ok,已经成功了,可以试试了。。。

下面来添加,精华功能

2、精华功能

首先打开header.ejs,修改精华的链接为:

<li><a href="/essence" title="24小时内评论最多">精华</a></li>


打开model下的mind.js,添加方法:

//精华
Mind.getEssence = function(callback) {/
mongodb.connect(settings.url,function (err, db) {
if (err) {
return callback(err);
}
db.collection('minds', function(err, collection) {
if (err) {
db.close();
return callback(err);
}
//限制只取20条
collection.find({flag :true}).limit(20).skip(0).sort({comments:-1,ups:-1,cdate: -1,downs:-1}).toArray(function(err,results){
db.close();
if (err) {
return callback(err);
}
callback(null, results);
});
});
});
};


这就是精华查找的内容,那么在routes/index.js中添加:

app.get('/essence', function (req, res) {
Mind.getEssence(function(err, minds) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
res.render('index', {
title : 'OMinds - 精华',
minds : minds,
user : req.session.user
});
});
});


以上,就ok了,下面是截图效果:

搜索



精华



效果可能不是很明显~~~,好了赶快试试吧,

小站:http://oideas.herokuapp.com

教程演示地址:http://omind.herokuapp.com

教程代码地址:https://github.com/joveth/OMinds

QQ交流群:158325682
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息