nodejs+mongodb實現curd 登錄 注銷 分頁等功能的實現過程

jopen 10年前發布 | 61K 次閱讀 Node.js 開發 MongoDB

e page.
 */
//取得一個集合中的所有數據并實現分頁效果,這里我們還處理session的登錄判斷等

</div> </div>

    exports.index = function(req, res){
var mongodb = require('mongodb');
var page = req.params.page; //取得page的值,注意route中的配置,可以有可以沒有這個page
var total; //分頁的總數
var pagenum =4; //分頁的條數
if(page){
page = page;
}else{
page = 1;
}

  mongodb.connect('mongodb://localhost:27017/test',function(err,conn){  
    conn.collection('test_insert',function(err,coll){  
        //這里是取得分頁的總數(筆者最開始在這里的時候用的是coll.count()取總數,結果可想而知,所以取總數大家一定要注意)  
        coll.count(function(err,count){  
            total = count;  
        })  
        //這里用limit+skip實現mongodb的分頁效果,這種寫法對于大數據量的分頁來說不合適,但是為了方便就這樣了  
        //下面是整個的過程,實現了分頁實現一個集合中的所有數據  
        //在nodejs連接mongodb的時候判斷是否查詢出了數據的時候我們用toArray方法獲得的第二個參數來判斷  
        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{  

                //這里要注意下,在對next的時候一定要對page加parseInt方法,不然他會按照字符串來相加,至于為什么,目前我也不清楚,但是只要加了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('沒有任何數據');  
            }  
            conn.close();  //每次執行完后都要把鏈接給關掉(注意關掉的位置,不能放在collection的時候就關閉,不然上面的數據永遠取不到)  
        })  
    })  
  });  
};  </pre><br />


//向一個集合中插入數據

    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是根據method數據發過來的方法獲得的  
            //使用mongodb插入數據的時候,我們可以在后面放一個回調方法來判斷數據是否插入成功  
            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();  
                })  
            })  
        })  
    };  

//刪除一個集合中的方法
    exports.del = function(req,res){  
        var mongodb = require('mongodb');  
        var id = req.params.id;  
        var mongoid = mongodb.BSONPure.ObjectID(id); //nodejs里面吧mongodb的id轉化為ObjectID  
        mongodb.connect('mongodb://localhost:27017/test',function(err,conn){  
            conn.collection('test_insert',function(err,coll){  
                //這里的刪除方法來判斷數據成功與否,筆者試過了上面用toArray方法和直接在后面更回調函數的方法都不能判斷,所以加了if判斷  
                //這里希望大家有什么好的實現方法說下,畢竟這種方法看起不怎么爽  
                if(coll.remove({'_id':mongoid})){  
                    console.log('恭喜你刪除成功');  
                    res.redirect('/')  
                }else{  
                    console.log('刪除失敗');  
                    res.redirect('/')  
                }  
                conn.close();  
            })  
        })  
    }  



//更新數據
    exports.update = function(req,res){  
        var mongodb = require('mongodb');  
        var id = req.params.id;  
         //nodejs里面吧mongodb的id轉化為ObjectID  
        mongodb.connect('mongodb://localhost:27017/test',function(err,conn){  
            conn.collection('test_insert',function(err,coll){  
                //下面判斷id是否存在,存在的話就顯示更新的數據的模板,否則就更新代碼  
                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);

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!