1. 程式人生 > >封裝mongoDB的資料操作

封裝mongoDB的資料操作

原生MongoDB+express路由寫起來程式碼會非常冗餘。

比如:登入驗證的路由  會這麼寫

app.post('/doLogin',function(req,res){
   
    MongoClient.connect(DBurl,(err,db)=>{
        if(err){
            console.log(err);
            return ;
        }else{
            let result = db.collection('user').find(req.body);
            result.toArray((err,data)=>{
                if(data.length!=0){
                   console.log(data);
                   req.session.userInfo = data[0];
                   
                    res.redirect('/product')
                }else{
                   res.send("<script>alert('賬戶名或密碼錯誤');location.href='/login'</script>")
                }
            })
        }
        db.close();
    })

})

如果路由多起來,則會給每個路由連結一次資料庫,關閉一次資料庫

如:

app.get('/login',()=>{

    MongoClient.connect(url,(err,db)=>{
         
         db.user.find();
         db.close();
    })   
    
})

app.get('/main',()=>{

    MongoClient.connect(url,(err,db)=>{
         
         db.user.find();
         db.close();
    })   
    
})

app.get('/out',()=>{

    MongoClient.connect(url,(err,db)=>{
         
         db.user.find();
         db.close();
    })   
    
})

這時我們可以把連線資料庫,還有增刪改查封裝一下

//這裡是 db.js
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const DBurl = 'mongodb://localhost:27017/productmanage';



function __connect(callback){   
       //定義連線資料庫函式
  MongoClient.connect(DBurl,(err,db)=>{
        
        if(err){
        	console.log('資料庫連線失敗');
        	return 0 ;
        }
        callback(db);   //回撥函式用來查詢資料
  })
 
}

exports.ObjectID = ObjectID;
exports.find=(collectionName,json,callback)=>{
	__connect(function(db){
       let result = db.collection(collectionName).find(json);
       result.toArray((error,data)=>{
          console.log(data);
          callback(error,data);
          db.close();  //關閉資料庫
       })
	})
}

exports.insert=(collectionName,json,callback)=>{
	__connect(function(db){
       db.collection(collectionName).insertOne(json,(error)=>{
       	  if(error){
       	  	res.send('資料庫插入失敗');
       	  }else{
       	  	console.log('資料插入成功');
       	  	callback();
       	  	db.close();
       	  }
       });
       
	})
}

exports.delete=(collectionName,json,callback)=>{
	__connect(function(db){
       db.collection(collectionName).deleteOne(json,(error)=>{
       	  if(error){
       	  	res.send('資料庫刪除失敗');
       	  }else{
       	  	console.log('資料刪除成功');
       	  	callback();
       	  	db.close();
       	  }
       });
       
	})
}


這時我們在外部引入 db.js 就可以簡化我們的程式碼了

const DB = require('./module/db');
//修改後的程式碼
app.post('/doLogin',function(req,res){
    DB.find('user',req.body,(error,data)=>{
      if(data.length!=0){
         
         req.session.userInfo = data[0];
                   
         res.redirect('/product')
        }else{
               res.send("<script>alert('賬戶名或密碼錯 
    誤');location.href='/login'</script>")
        }
    })

})

//沒修改前的程式碼
app.post('/doLogin',function(req,res){
    MongoClient.connect(DBurl,(err,db)=>{
        if(err){
            console.log(err);
            return ;
        }else{
            let result = db.collection('user').find(req.body);
            result.toArray((err,data)=>{
                if(data.length!=0){
                   console.log(data);
                   req.session.userInfo = data[0];
                   
                    res.redirect('/product')
                }else{
                   res.send("<script>alert('賬戶名或密碼錯誤');location.href='/login'</script>")
                }
            })
        }
        db.close();
    })
})