当前位置:Gxlcms > 数据库问题 > 封装 Koa操作Mongodb数据库的DB类库

封装 Koa操作Mongodb数据库的DB类库

时间:2021-07-01 10:21:17 帮助过:8人阅读

http://mongodb.github.io/node-mongodb-native/3.0/quick-start/quick-start/ /* nodejs操作mongodb数据库 1.安装mongodb、 cnpm install mongodb --save 2.引入mongodb下面的MongoClient var MongoClient = require(‘mongodb‘).MongoClient; 3.定义数据库连接的地址 以及配置数据库 koa数据库的名称 var url = ‘mongodb://localhost:27017/‘; var dbName = ‘koa‘ 4.nodejs连接数据库 MongoClient.connect(url,function(err,client){ const db = client.db(dbName); 数据库db对象 }) 5.操作数据库 db.user.insert MongoClient.connect(url,function(err,db){ db.collection(‘user‘).insertOne({"name":"张三"},function(err,result){ db.close() //关闭连接 }) }) */ var MongoClient = require(‘mongodb‘).MongoClient; var dbUrl = ‘mongodb://localhost:27017/‘; var dbName = ‘koa‘ //连接数据库 //console.time(‘start‘); //MongoClient.connect(dbUrl,(err,client)=>{ // if(err){ // // console.log(err); // return; // } // // var db=client.db(dbName); // console.timeEnd(‘start‘); // //增加数据 // // db.collection(‘user‘).insertOne({‘username‘:"wangwu",‘age‘:26,‘sex‘:"男","status":"1"},function(err,result){ // // if(!err){ // //console.log(‘增加数据成功‘); // client.close(); // // } // }) // //}) console.time(‘start1‘); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据 var result=db.collection(‘user‘).find({}); result.toArray((err,docs)=>{ console.timeEnd(‘start1‘); console.log(docs); }) }) console.time(‘start2‘); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据 var result=db.collection(‘user‘).find({}); result.toArray((err,docs)=>{ console.timeEnd(‘start2‘); console.log(docs); }) })
var Koa=require(‘koa‘),
    router = require(‘koa-router‘)(),
    render = require(‘koa-art-template‘),
    path=require(‘path‘),

    DB=require(‘./module/db.js‘);

var app=new Koa();
//配置 koa-art-template模板引擎
render(app, {
    root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
});
router.get(‘/‘,async (ctx)=>{

    console.time(‘start‘);
    var result=await DB.find(‘user‘,{});

    console.timeEnd(‘start‘);
    console.log(result);
    await ctx.render(‘index‘,{
        list:{
            name:‘张三‘
        }
    });
})
router.get(‘/news‘,async (ctx)=>{

    console.time(‘start‘);
    var result=await DB.find(‘user‘,{});

    console.timeEnd(‘start‘);
    ctx.body="这是一个新闻页面";
})
app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);

DB.js

//DB库
var MongoClient = require(‘mongodb‘).MongoClient;

var Config=require(‘./config.js‘);

class Db{


    static getInstance(){   /*1、单例  多次实例化实例不共享的问题*/

        if(!Db.instance){
            Db.instance=new Db();
        }
        return  Db.instance;
    }

    constructor(){

        this.dbClient=‘‘; /*属性 放db对象*/
        this.connect();   /*实例化的时候就连接数据库*/

    }

    connect(){  /*连接数据库*/
      let _that=this;
      return new Promise((resolve,reject)=>{
          if(!_that.dbClient){         /*1、解决数据库多次连接的问题*/
              MongoClient.connect(Config.dbUrl,(err,client)=>{

                  if(err){
                      reject(err)

                  }else{

                      _that.dbClient=client.db(Config.dbName);
                      resolve(_that.dbClient)
                  }
              })

          }else{
              resolve(_that.dbClient);

          }


      })

    }

    find(collectionName,json){

       return new Promise((resolve,reject)=>{

           this.connect().then((db)=>{

               var result=db.collection(collectionName).find(json);

               result.toArray(function(err,docs){

                   if(err){
                       reject(err);
                       return;
                   }
                   resolve(docs);
               })

           })
       })
    }
    update(){

    }
    insert(){


    }
}


module.exports=Db.getInstance();

config.js

/*配置文件*/


var app={

    dbUrl: ‘mongodb://localhost:27017/‘,

    dbName: ‘koa‘

}

module.exports=app;

 数据库的备份

//DB库
var MongoClient = require(‘mongodb‘).MongoClient;

var Config=require(‘./config.js‘);

class Db{


    static getInstance(){   /*1、单例  多次实例化实例不共享的问题*/

        if(!Db.instance){
            Db.instance=new Db();
        }
        return  Db.instance;
    }

    constructor(){

        this.dbClient=‘‘; /*属性 放db对象*/
        //this.connect();

    }

    connect(){  /*连接数据库*/
      let _that=this;
      return new Promise((resolve,reject)=>{
          if(!_that.dbClient){         /*1、解决数据库多次连接的问题*/
              MongoClient.connect(Config.dbUrl,(err,client)=>{

                  if(err){
                      reject(err)

                  }else{

                      _that.dbClient=client.db(Config.dbName);
                      resolve(_that.dbClient)
                  }
              })

          }else{
              resolve(_that.dbClient);

          }


      })

    }

    find(collectionName,json){

       return new Promise((resolve,reject)=>{

           this.connect().then((db)=>{

               var result=db.collection(collectionName).find(json);

               result.toArray(function(err,docs){

                   if(err){
                       reject(err);
                       return;
                   }
                   resolve(docs);
               })

           })
       })
    }
    update(){

    }
    insert(){


    }
}

var myDb=Db.getInstance();

setTimeout(function(){
    console.time(‘start‘);
    myDb.find(‘user‘,{}).then(function(data){
        //console.log(data);
        console.timeEnd(‘start‘);
    })


},100)


setTimeout(function(){
    console.time(‘start1‘);
    myDb.find(‘user‘,{}).then(function(data){
        //console.log(data);
        console.timeEnd(‘start1‘);
    })


},3000)





var myDb2=Db.getInstance();

setTimeout(function(){
    console.time(‘start3‘);
    myDb2.find(‘user‘,{}).then(function(data){
        //console.log(data);
        console.timeEnd(‘start3‘);
    })


},5000)


setTimeout(function(){
    console.time(‘start4‘);
    myDb2.find(‘user‘,{}).then(function(data){
        //console.log(data);
        console.timeEnd(‘start4‘);
    })


},7000)

demo:

var Koa=require(‘koa‘),
    router = require(‘koa-router‘)(),
    render = require(‘koa-art-template‘),
    path=require(‘path‘),
    bodyParser=require(‘koa-bodyparser‘),
    DB=require(‘./module/db.js‘);

var app=new Koa();

//配置post提交数据的中间件
app.use(bodyParser());

//配置 koa-art-template模板引擎
render(app, {
    root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
});
//显示学员信息
router.get(‘/‘,async (ctx)=>{

    var result=await DB.find(‘user‘,{});

    console.log(result);
    await ctx.render(‘index‘,{
        list:result
    });
})
//增加学员
router.get(‘/add‘,async (ctx)=>{

    await ctx.render(‘add‘);
})


//执行增加学员的操作
router.post(‘/doAdd‘,async (ctx)=>{

    //获取表单提交的数据

   // console.log(ctx.request.body);  //{ username: ‘王麻子‘, age: ‘12‘, sex: ‘1‘ }


    let data=await DB.insert(‘user‘,ctx.request.body);
    //console.log(data);
    try{
        if(data.result.ok){
            ctx.redirect(‘/‘)
        }
    }catch(err){
        console.log(err);
        return;
        ctx.redirect(‘/add‘);
    }



})



//编辑学员
router.get(‘/edit‘,async (ctx)=>{
    //通过get传过来的id来获取用户信息

    let id=ctx.query.id;

    let data=await DB.find(‘user‘,{"_id":DB.getObjectId(id)});

    //获取用户信息
    await ctx.render(‘edit‘,{

        list:data[0]
    });

})


router.post(‘/doEdit‘,async (ctx)=>{
    //通过get传过来的id来获取用户信息
    //console.log(ctx.request.body);

    var id=ctx.request.body.id;
    var username=ctx.request.body.username;
    var age=ctx.request.body.age;
    var sex=ctx.request.body.sex;

    let data=await DB.update(‘user‘,{"_id":DB.getObjectId(id)},{
        username,age,sex
    })

    try{
        if(data.result.ok){
            ctx.redirect(‘/‘)
        }
    }catch(err){
        console.log(err);
        return;
        ctx.redirect(‘/‘);
    }

})


//删除学员
router.get(‘/delete‘,async (ctx)=>{

    let id=ctx.query.id;

    var data=await DB.remove(‘user‘,{"_id":DB.getObjectId(id)});
    console.log(data);
    if(data){
        ctx.redirect(‘/‘)
    }

})



app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);
var Koa=require(‘koa‘),
    router = require(‘koa-router‘)(),
    render = require(‘koa-art-template‘),
    path=require(‘path‘),
    bodyParser=require(‘koa-bodyparser‘),
    DB=require(‘./module/db.js‘);

var app=new Koa();

//配置post提交数据的中间件
app.use(bodyParser());

//配置 koa-art-template模板引擎
render(app, {
    root: path.join(__dirname, ‘views‘),   // 视图的位置
    extname: ‘.html‘,  // 后缀名
    debug: process.env.NODE_ENV !== ‘production‘  //是否开启调试模式
});
//显示学员信息
router.get(‘/‘,async (ctx)=>{

    var result=await DB.find(‘user‘,{});

    console.log(result);
    await ctx.render(‘index‘,{
        list:result
    });
})
//增加学员
router.get(‘/add‘,async (ctx)=>{

    await ctx.render(‘add‘);
})


//执行增加学员的操作
router.post(‘/doAdd‘,async (ctx)=>{

    //获取表单提交的数据

   // console.log(ctx.request.body);  //{ username: ‘王麻子‘, age: ‘12‘, sex: ‘1‘ }


    let data=await DB.insert(‘user‘,ctx.request.body);
    //console.log(data);
    try{
        if(data.result.ok){
            ctx.redirect(‘/‘)
        }
    }catch(err){
        console.log(err);
        return;
        ctx.redirect(‘/add‘);
    }



})



//编辑学员
router.get(‘/edit‘,async (ctx)=>{
    //通过get传过来的id来获取用户信息

    let id=ctx.query.id;

    let data=await DB.find(‘user‘,{"_id":DB.getObjectId(id)});

    //获取用户信息
    await ctx.render(‘edit‘,{

        list:data[0]
    });

})


router.post(‘/doEdit‘,async (ctx)=>{
    //通过get传过来的id来获取用户信息
    //console.log(ctx.request.body);

    var id=ctx.request.body.id;
    var username=ctx.request.body.username;
    var age=ctx.request.body.age;
    var sex=ctx.request.body.sex;

    let data=await DB.update(‘user‘,{"_id":DB.getObjectId(id)},{
        username,age,sex
    })

    try{
        if(data.result.ok){
            ctx.redirect(‘/‘)
        }
    }catch(err){
        console.log(err);
        return;
        ctx.redirect(‘/‘);
    }

})


//删除学员
router.get(‘/delete‘,async (ctx)=>{

    let id=ctx.query.id;

    var data=await DB.remove(‘user‘,{"_id":DB.getObjectId(id)});
    console.log(data);
    if(data){
        ctx.redirect(‘/‘)
    }

})

app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);

Koa 操作 Mongodb 数据库

官方文档:http://mongodb.github.io/node-mongodb-native/

封装 Koa操作Mongodb数据库的DB类库

标签:mongod   地址   console   use   struct   对象   exports   span   rect   

人气教程排行