封裝mongoDB的資料操作
阿新 • • 發佈:2018-12-24
原生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();
})
})