• 封装 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/

  • 相关阅读:
    二叉搜索树的第k个结点
    序列化二叉树
    把二叉树打印成多行
    按之字形顺序打印二叉树
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
    链表中环的入口结点
    字符流中第一个不重复的字符
    基数排序的理解和实现(Java)
  • 原文地址:https://www.cnblogs.com/loaderman/p/11511963.html
Copyright © 2020-2023  润新知