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

Posted loaderman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装 Koa操作Mongodb数据库的DB类库相关的知识,希望对你有一定的参考价值。

//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类库的主要内容,如果未能解决你的问题,请参考以下文章

Node.JS中使用单例封装MongoDB

KOA实战系列之MongoDB篇

前后端分离全栈开发项目师徒开启,VUE+koa+MongoDB!

用Node.JS+MongoDB搭建个人博客(model目录)

mongoose 操作 mongodb 笔记 (自己的笔记,自己看的)

Mongoose使用小结