e page.
*/
//取得一個(gè)集合中的所有數(shù)據(jù)并實(shí)現(xiàn)分頁效果,這里我們還處理session的登錄判斷等
exports.index = function(req, res){
var mongodb = require('mongodb');
var page = req.params.page; //取得page的值,注意route中的配置,可以有可以沒有這個(gè)page
var total; //分頁的總數(shù)
var pagenum =4; //分頁的條數(shù)
if(page){
page = page;
}else{
page = 1;
}
mongodb.connect('mongodb://localhost:27017/test',function(err,conn){
conn.collection('test_insert',function(err,coll){
//這里是取得分頁的總數(shù)(筆者最開始在這里的時(shí)候用的是coll.count()取總數(shù),結(jié)果可想而知,所以取總數(shù)大家一定要注意)
coll.count(function(err,count){
total = count;
})
//這里用limit+skip實(shí)現(xiàn)mongodb的分頁效果,這種寫法對(duì)于大數(shù)據(jù)量的分頁來說不合適,但是為了方便就這樣了
//下面是整個(gè)的過程,實(shí)現(xiàn)了分頁實(shí)現(xiàn)一個(gè)集合中的所有數(shù)據(jù)
//在nodejs連接mongodb的時(shí)候判斷是否查詢出了數(shù)據(jù)的時(shí)候我們用toArray方法獲得的第二個(gè)參數(shù)來判斷
coll.find().limit(pagenum).skip(pagenum*(page-1)).toArray(function(err,results){
if(results.length){
if(page==1){
var prevpage = page;
}else{
var prevpage = page-1;
}
if(page == Math.ceil(total/pagenum)){
var nextpage = Math.ceil(total/pagenum);
}else{
//這里要注意下,在對(duì)next的時(shí)候一定要對(duì)page加parseInt方法,不然他會(huì)按照字符串來相加,至于為什么,目前我也不清楚,但是只要加了parseInt就是正確的了
var nextpage = parseInt(page)+1;
}
res.render('index',
{
title:'123',
username: req.session.username,
allIndexs:results,
prevpage:prevpage,
nextpage:nextpage
//page: "<a href='/"+prevpage+"'>prev</a> <a href='/"+nextpage+"'>next</a>"
}
);
}else{
console.log('沒有任何數(shù)據(jù)');
}
conn.close(); //每次執(zhí)行完后都要把鏈接給關(guān)掉(注意關(guān)掉的位置,不能放在collection的時(shí)候就關(guān)閉,不然上面的數(shù)據(jù)永遠(yuǎn)取不到)
})
})
});
};
//向一個(gè)集合中插入數(shù)據(jù)
exports.insert = function(req,res){
var mongodb = require('mongodb');
mongodb.connect('mongodb://localhost:27017/test',function(err,conn){
conn.collection('test_insert',function(err,coll){
//這里的req.body.username是根據(jù)method數(shù)據(jù)發(fā)過來的方法獲得的
//使用mongodb插入數(shù)據(jù)的時(shí)候,我們可以在后面放一個(gè)回調(diào)方法來判斷數(shù)據(jù)是否插入成功
coll.insert({"username":req.body.username,"password":req.body.password},function(err,results){
if(results.length){
res.redirect('/');
}else{
res.redirect('/users');
}
conn.close();
})
})
})
console.log(req.body.username)
};
//登錄方法,并且保存session,好在ejs中做判斷是否登錄成功
exports.login = function(req,res){
var username = req.body.username;
var password = req.body.password;
var mongodb = require('mongodb');
mongodb.connect('mongodb://localhost:27017/test',function(err,conn){
conn.collection('test_insert',function(err,coll){
coll.find({'username':username,'password':password}).toArray(function(err,results){
if(results.length){
console.log('success');
req.session.username = username;
res.redirect('/');
}else{
console.log('error');
res.redirect('/notlogin');
}
conn.close();
})
})
})
};
//刪除一個(gè)集合中的方法
exports.del = function(req,res){
var mongodb = require('mongodb');
var id = req.params.id;
var mongoid = mongodb.BSONPure.ObjectID(id); //nodejs里面吧mongodb的id轉(zhuǎn)化為ObjectID
mongodb.connect('mongodb://localhost:27017/test',function(err,conn){
conn.collection('test_insert',function(err,coll){
//這里的刪除方法來判斷數(shù)據(jù)成功與否,筆者試過了上面用toArray方法和直接在后面更回調(diào)函數(shù)的方法都不能判斷,所以加了if判斷
//這里希望大家有什么好的實(shí)現(xiàn)方法說下,畢竟這種方法看起不怎么爽
if(coll.remove({'_id':mongoid})){
console.log('恭喜你刪除成功');
res.redirect('/')
}else{
console.log('刪除失敗');
res.redirect('/')
}
conn.close();
})
})
}
//更新數(shù)據(jù)
exports.update = function(req,res){
var mongodb = require('mongodb');
var id = req.params.id;
//nodejs里面吧mongodb的id轉(zhuǎn)化為ObjectID
mongodb.connect('mongodb://localhost:27017/test',function(err,conn){
conn.collection('test_insert',function(err,coll){
//下面判斷id是否存在,存在的話就顯示更新的數(shù)據(jù)的模板,否則就更新代碼
if(id){
var mongoid = mongodb.BSONPure.ObjectID(id);
coll.find({'_id':mongoid}).toArray(function(err,results){
if(results.length){
console.log('success');
console.log(results);
res.render('update', { 'oneResult':results });
}else{
console.log('error');
}
conn.close();
})
}else{
var username = req.body.username;
var password = req.body.password;
var mongoid = mongodb.BSONPure.ObjectID(req.body.id);
//這里的更新也一樣,不知道怎么做判斷更新是否成功,所以干脆就這樣寫了
coll.update({'_id':mongoid},{'$set':{'username':username,'password':password}});
res.redirect('/');
conn.close();
}
})
})
}
//清空session
exports.logout = function(req,res){
req.session.username=''; //清空session
res.redirect('/');
}
//這里附上app中的方法
app.get('/:page?', routes.index);
app.get('/del/:id',routes.del);
app.get('/logout', routes.logout);
app.get('/update/:id',routes.update);
app.post('/update',routes.update);
app.post('/', routes.insert);
app.post('/login', routes.login);
app.get('/users', user.list);
|