封装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();
    })
})

猜你喜欢

转载自blog.csdn.net/weixin_37823121/article/details/82628878